Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >webgl 3D纹理从2D图像,工作,但与渲染问题

webgl 3D纹理从2D图像,工作,但与渲染问题
EN

Stack Overflow用户
提问于 2016-10-25 07:40:57
回答 1查看 508关注 0票数 2

我试图在WebGL中使用3D纹理,但由于它目前不受本地支持,我不得不使用2D图像的技巧。它由64幅图像组成,每幅图像为64 of乘64 of (总计64x4096)。我想张贴一个链接,但我没有足够的xp所以(认真地?),你仍然可以找到文件url在小提琴更低。

我使用了gman溶液以及我自己的(最近的邻居)。在这两种情况下,当我使用斜投影()时,灰条纹伪影都有一个奇怪的呈现问题。

当投影是斜的时,条纹/破折号似乎出现在切片之间,并且取决于摄像机的位置,它们不以相同的频率出现。这就是为什么我想到的是渲染问题,而不是抽样问题。

有人知道如何处理这些文物吗?有什么内置的OpenGL ES可以启用/禁用吗?

这是着色代码:

代码语言:javascript
运行
AI代码解释
复制
<!-- FRAGMENT SHADER -->
<script id="fragment_shader1_custom3" type="x-shader/x-fragment">

uniform sampler2D texture;
uniform float imageIndex;
varying vec4 worldCoord;
varying vec2 vUv;

// tex is a texture with each slice of the cube placed in grid in a texture.
// texCoord is a 3d texture coord
// size is the size if the cube in pixels.
// slicesPerRow is how many slices there are across the texture
// numRows is the number of rows of slices

vec2 computeSliceOffset(float slice, float slicesPerRow, vec2 sliceSize) {
  return sliceSize * vec2(mod(slice, slicesPerRow),
  floor(slice / slicesPerRow));
}

vec4 sampleAs3DTexture(sampler2D tex, vec3 texCoord, float size, float numRows, float slicesPerRow){

  float slice   = texCoord.z * size;
  float sliceZ  = floor(slice);                         // slice we need
  float zOffset = fract(slice);                         // dist between slices

  vec2 sliceSize = vec2(1.0 / slicesPerRow,             // u space of 1 slice
    1.0 / numRows);                 // v space of 1 slice

  vec2 slice0Offset = computeSliceOffset(sliceZ, slicesPerRow, sliceSize);
  vec2 slice1Offset = computeSliceOffset(sliceZ + 1.0, slicesPerRow, sliceSize);

  vec2 slicePixelSize = sliceSize / size;               // space of 1 pixel
  vec2 sliceInnerSize = slicePixelSize * (size - 1.0);  // space of size pixels

  vec2 uv = slicePixelSize * 0.5 + texCoord.xy * sliceInnerSize;
  vec4 slice0Color = texture2D(tex, slice0Offset + uv);
  vec4 slice1Color = texture2D(tex, slice1Offset + uv);
  return mix(slice0Color, slice1Color, zOffset);
}


void main( void ) {
  // the position within the shader
  vec2 shaderPos = vUv;

  // if outside the texture cube, use a yellow color
  if(worldCoord.x < 0.0 || worldCoord.x >= 1.0 || worldCoord.y < 0.0 || worldCoord.y >= 1.0 || worldCoord.z < 0.0 || worldCoord.z >= 1.0){
    gl_FragColor = vec4(1.0, 1.0 , 0.0, 1.0);
  }else{

    vec3 chunkPosition = vec3(worldCoord.x, worldCoord.y, worldCoord.z);

    // 63.0 instead of 64.0 to avoid a edge situation
    gl_FragColor = sampleAs3DTexture(texture, chunkPosition, 63.0, 64.0, 1.0);

  }
}
</script> <!-- END FRAGMENT SHADER -->



<!-- VERTEX SHADER -->
<script id="vertexShader_custom1" type="x-shader/x-vertex">
varying vec2 vUv;
varying vec4 worldCoord;

void main()
{
  vUv = uv;
  vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
  gl_Position = projectionMatrix * mvPosition;
  worldCoord = modelMatrix * vec4( position, 1.0 );
}
</script> <!-- END VERTEX SHADER -->

这是小提琴

注意,我使用的是ThreeJS。谢谢你的帮助。

EN

回答 1

Stack Overflow用户

发布于 2016-10-25 12:05:35

正如您自己发现的,解决方案是在js代码中使用texture.minFilter ()加载纹理之后设置THREE.TextureLoader= THREE.NearestFilter (为此,请将js代码附加到您的问题中,这可能有助于将来的用户在堆栈溢出时处理这个问题)。

现在解释一下条纹:当你的像素接近你改变切片的一个平面时,变量sliceZ就会跳跃。你会遇到像素覆盖多个纹理的情况。请注意,像素的一部分位于某个v坐标,而部分像素位于v坐标,而v坐标的大小与纹理的64个像素相对应(以获取下面的图像)/我的猜测是,隐藏的机器相信,您的像素覆盖了64个纹理像素的v-跨度,因此获得了这些像素的平均值(在.minFilter中默认的mip地图设置已经预先计算了这一平均值)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40244206

复制
相关文章
SQL Server 存储过程
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。     存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。     由于存储过程在创建时即在数据
牛嗷嗷
2018/03/30
1.8K0
SQL Server 存储过程
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。
冰封一夏
2019/09/11
1.4K0
sql server存储过程
存储过程、函数区别 函数可以在sql语句中调用,存储过程不行 函数只能返回一个返回值,存储过程可以返回多个 存储过程 无参数的存储过程 create proc usp_helloworld as begin print 'Hello World' end 有参数的存储过程 create proc usp_book @name nvarchar(50), @author nvarchar(50) as begin select * from book where name=@name and
sofu456
2020/04/30
1.2K0
SQL Server 存储过程
Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的概念     存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。     存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。     由于存储过程在创建时即在数据
hbbliyong
2018/03/05
1.8K0
SQL Server 存储过程_mysql存储过程教程
**相对于视图的优势(为什么使用存储过程):** Sql Server中视图通过简单的Select查询来解决多次复杂的查询,但是视图不能提供业务逻辑的功能,而存储过程可以。 **什么是存储过程:**
全栈程序员站长
2022/11/14
5.6K0
Sql Server 调用存储过程
创建存储过程: 1、在企业管理器中新建存储过程 2、在查询分析器中编辑存储过程(带有参数和返回值的) SET  QUOTED_IDENTIFIER  ON     GO   SET  ANSI_NULLS  ON     GO     ALTER      procedure  insertUserinfo  @name   varchar ( 50 ), @sex   varchar ( 50 ), @birthday   varchar ( 50 ), @returnValue   int   =   
西门呀在吹雪
2020/11/09
1.8K0
sql server存储过程编程
存储过程是一组完成特定功能的SQL 语句集合,经编译后存储在数据库中。 存储过程作为一个单元进行处理并以一个名称来标识。它能向用户返回数据、向数据库表中写入或修改数据等操作。 用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。 存储过程的作用 执行速度快; 减少网络流量; 作为一种安全机制。通过设置用户只可能使用存储过程访问数据,限制用户不能直接操作数据库中的敏感数据,以保障数据的安全性; 屏蔽T-SQL命令,提供交互查询的客户接口,增加数据库应用的方便性。 存储过程和函数的异同 本质
欠扁的小篮子
2018/04/09
2.1K0
Sql Server 存储过程分页
  在企业级项目开发中,分页查询,获取某一类数据的List列表,这一功能是最普遍也是最重要的功能。其做法有很多种,例如ORM中自定义分页查询,一般情况下是拼接强类型的查询条件,然后转换成sql语句,查出出分页结果。在ORM转换过程中会稍微损失性能,效率会降低。对于百万级以上的大数据量,要求查询界面显示速度快,此时手动写存储过程,并且在存储过程中分页是最佳选择。下面给出具体的示例与说明:
张传宁IT讲堂
2019/09/17
1.5K0
Docker 上运行 SQL Server
SQL Server 真是越来越有看头。当我们还在为 Linux 上运行 SQL Server 而兴奋的时候,SQL Server 已经开启了 容器化之路,至此才能看清微软的胸怀,开始拥抱更大的世界。当我越来越深入去阅读有关 Docker 容器的文档,已然发现曾经部署上千台 Linux MySQL 的场景,如今在 Docker 的帮助下,SQL Server 也是手到擒来。如果 SQL Server 再匹配一个分布式计算引擎,那也是分分钟即可打造一个计算怪兽,和小象 Hadoop 分庭抗礼。届时玩 SQL 的朋友们不用分心去折腾 Hadoop/Spark, 仅用 T-SQL 依然可以笑傲江湖。因为人工智能,机器学习算法本就是数据集合操作,天生和 SQL 结合紧密。不信看我的这篇:
Lenis
2019/12/26
1.9K0
Sql Server 存储过程使用技巧
Copy下面的代码,然后新建查询,就可以写sql语句,执行完后,一个你自己的存储过程就建立好了!
跟着阿笨一起玩NET
2018/09/19
1.3K0
修改SQL SERVER内置存储过程
SQLSERVER估计是为了安装或者其它方面,它内置了一批危险的存储过程。能读到注册表信息,能写入注册表信息,能读磁盘共享信息等等……各位看到这儿,心里可能会在想,我的网站中有其它的代码,又不像查询分析器那样能直接将结果输出。给你这个权限,也不能怎么样,还是看不到信息。如果各位这样想就大错特错了。提示一下,如果攻击者有CREATE TABLE的权限,那么创建一个临时表,然后将信息INSERT到表中,然SELECT出来,接着跟数字进行比较,让SQL SERVER报错,那么结果就全出来了……所以我们要报着宁错杀,不放过的态度进行修补。
Java架构师必看
2021/03/22
9450
SQL Server 存储过程生成insert语句
你肯定有过这样的烦恼,同样的表,不同的数据库,加入你不能执行select  insert 那么你肯定需要一条这样的存储过程,之需要传入表明,就会给你生成数据的插入语句。 当然数据表数量太大,你将最好用别的方式 Create proc [dbo].[spGenInsertSQL] (@tablename varchar(256)) as begin declare @sql varchar(8000) declare @sqlValues varchar(8000) set @sql =' (' set
用户1149182
2018/01/16
1.8K0
SQL Server 深入解析索引存储(上)
概述 最近要分享一个课件就重新把这块知识整理了一遍出来,篇幅有点长,想要理解的透彻还是要上机实践。 聚集索引 --创建测试数据库 CREATE DATABASE Ixdata GO USE [Ixdata] GO ---创建测试表 CREATE TABLE Orders (ID INT PRIMARY KEY IDENTITY(1,1), NAME CHAR(80)NOT NULL, IDATE DATETIME NOT NULL DEFAULT(GETDATE()) ); GO ---插入1000条测试
逸鹏
2018/04/11
1K0
SQL Server 深入解析索引存储(上)
SQL Server 存储过程的分页方案比拼
CREATE TABLE [TestTable] (  [ID] [int] IDENTITY (1, 1) NOT NULL ,  [FirstName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  [LastName] [nvarchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,  [Country] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,  [Note] [nvarchar] (2000) COLLATE Chinese_PRC_CI_AS NULL  ) ON [PRIMARY] GO
Java架构师必看
2021/03/22
8190
解决Azure DevOps部署到Azure后.NET Core网站无法启动的问题
最近我遭遇了一个奇怪的问题。使用Azure DevOps配置CI/CD管线,自动部署到Azure App Service以后,.NET Core的网站竟然会启动失败。我们来看看如何解决这个问题。
Edi Wang
2019/07/09
9330
解决Azure DevOps部署到Azure后.NET Core网站无法启动的问题
Azure上一键部署Azure Stack
方便在Azure Global上创建Azure Stack ASDK POC环境。可以访问以下github站点:
盆盆
2019/04/24
5420
Azure上一键部署Azure Stack
SQL Server 2012学习笔记 (六) ------ SQL Server 存储过程和触发器
  存储过程(Stored Procedure)是预编译SQL语句的集合,这些语句存储在一个名称下并作为一个单元来处理。存储过程代替了传统的逐条执行SQL语句的方式。一个存储过程中可包含查询、插入、删除、更新等操作的一系列SQL语句,当这个存储过程被调用执行时,这些操作也会同时执行。
挽风
2021/04/13
1.7K0
Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站
微软智慧云 Azure 上虽然早就有 App Service 这种完全托管的 PaaS 服务可以让我们分分钟建网站。但是不自己配一下环境,就不能体现技术含量,容易被说微软的人都只会点鼠标。年轻的时候不敲命令,什么时候可以?今天就教大家如何在 Azure 上用 Windows Server 2019 (Server Core) VM 的方式自己配环境部署 ASP.NET Core 网站。
Edi Wang
2019/08/09
2.4K0
Azure 上使用 Windows Server Core 运行 ASP.NET Core 网站
SQL Server 存储过程的几种常见写法分析
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用那种写法,以及各种写法优缺点,本文以一个简单的查询存储过程为例,简单说一下各种写法的区别,以及该用那种写法 专业DBA以及熟悉数据库的同学请无视。 废话不多,上代码说明,先造一个测试表待用,简单说明一下这个表的情况 类似订单表,订单表有订单ID,客户ID,订单创建时间等,查询条件是常用的订单ID,客户ID,以及订单创建时间 create table SaleOrder ( id
逸鹏
2018/04/11
1.5K0
SQL Server 存储过程的几种常见写法分析
Azure上一键部署Azure Stack
要参加微信课堂以及日常技术交流,请给我们发微信(微信号:markpah),请注明加入以下哪个群:
盆盆
2019/03/05
3420
Azure上一键部署Azure Stack

相似问题

在Stata代码中对varlist进行排序

10

在stata中对日期和时间进行反串

10

从Stata导入的R中的日期

16

在CPU中对单个MSAA样本进行后处理

11

JMeter,对样本进行后处理

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文