小编use*_*230的帖子

如何计算Tangent和Binormal?

在OpenGL着色语言(GLSL)中讨论凹凸贴图,镜面高光和这些东西

我有:

  • 顶点数组(例如{0.2,0.5,0.1,0.2,0.4,0.5,...})
  • 法线数组(例如{0.0,0.0,1.0,0.0,1.0,0.0,...})
  • 点光源在世界空间中的位置(例如{0.0,1.0,-5.0})
  • 观众在世界空间中的位置(例如{0.0,0.0,0.0})(假设观众位于世界的中心)

现在,我如何计算每个顶点的Binormal和Tangent?我的意思是,计算Binormals的公式是什么,我必须根据这些信息使用什么?和切线相关?

无论如何我都会构建TBN矩阵,所以如果你知道根据这些信息直接构造矩阵的公式会很好!

哦,是的,如果需要,我也有纹理坐标.正如我所说的GLSL,我认为,每个顶点解决方案都是不错的,它不需要一次访问多个顶点信息.

----更新-----

我找到了这个解决方案

vec3 tangent;
vec3 binormal;

vec3 c1 = cross(a_normal, vec3(0.0, 0.0, 1.0));
vec3 c2 = cross(a_normal, vec3(0.0, 1.0, 0.0));

if (length(c1)>length(c2))
{
    tangent = c1;
}
else
{
    tangent = c2;
}

tangent = normalize(tangent);

binormal = cross(v_nglNormal, tangent);
binormal = normalize(binormal);

但我不知道它是否100%正确.

opengl math 3d glsl

43
推荐指数
3
解决办法
4万
查看次数

OpenGL ES 2.0多重网格?(只是真实世界的例子)

我对这一点感到困惑.

我在书籍,博客,论坛甚至OpenGl规范中发现的一切都只是谈论一种非常抽象的技术.没有关于现实世界的例子.

我对此感到疯狂:如何使用OpenGL ES 2.x放置和管理多个对象(网格)?

理论上似乎很简单.你有一个顶点着色器(vsh)和片段着色器(fsh),然后你将两者绑定到一个程序(glGenProgram,glUseProgram,...).在每个渲染周期中,该程序将通过每个顶点执行其VSH,然后在该3d对象的每个"像素"上执行FSH,最后将最终结果发送到缓冲区(显然没有谈论每个顶点,光栅化和管道中的其他步骤).

好的,看起来很简单......

所有这些都是通过调用draw函数(glDrawArrays或glDrawElements)来解决的.

再好吧.

现在事情让我很困惑.如果你有几个要渲染的对象?

我们来谈谈一个现实世界的例子.想象一下,你有一个树木和一个角色的风景.景观的草有一个纹理,树有纹理到树干和树叶(纹理图集),最后字符有另一个纹理(纹理图集),也是动画.

想象一下这个场景后,我的问题很简单:你如何组织这个?

您是否为场景中的每个元素创建了一个单独的程序(带有一个VSH和FSH)?就像草地和土壤的救济计划一样,树木计划和角色计划?

我已经尝试过了,但是......当我创建多个程序并尝试使用glVertexAttribPointer()时,对象的纹理和颜色会相互冲突.因为第一个程序的属性,索引的位置在第二个程序中重复.

让我解释一下,我在一个控制场景底层的类中使用了glGetAttribLocation(),因此OpenGL核心为我返回了顶点属性的索引0,1和2.之后,在树类中我创建了另一个程序,其他的着色器,并且在此次使用glGetAttribLocation()之后,OpenGL核心返回索引为0,1,2和3.

在渲染周期之后,我开始用glUseProgram()设置第一个程序,并且我用glVertexAttribPointer()更改了它的顶点属性,最后调用了glDrawElements().在此之后,再次调用glUseProgram()到第二个程序并再次使用glVertexAttribPointer(),最后再使用glDrawElements().但是在这一点上,事物进入冲突,因为第二个程序的顶点属性索引也会影响第一个程序的顶点.

我尝试了很多东西,搜索了很多,问了很多......我很累.我找不到有什么不对.

所以我开始认为我做错了!

现在我再次重复我的问题:如何使用OpenGL ES 2.x中的多个网格(具有不同的纹理和行为)?使用多个程序?怎么样?

shader opengl-es objective-c

7
推荐指数
1
解决办法
2030
查看次数

我可以从C中的变量中检索数据类型吗?

有办法在C中获取数据类型吗?

例如:

int foo;

if (foo is int)
{
    // do something
}

或类似的东西:

if (typeof(foo) == typeof(int))
{
    // do something
}

提前致谢.

c types

6
推荐指数
1
解决办法
2万
查看次数

着色器的性能(顶点VS碎片)

简单的问题:

是否总是更好地在Vertex Shader中进行硬计算,而不是在Fragment Shader中进行?即使是高网格模型,也有超过100.000个多边形(假设有一堆独特的顶点)?

opengl performance shader

5
推荐指数
1
解决办法
987
查看次数

mod_rewrite VS相对路径

我的mod_rewrite代码是:

Options +FollowSymLinks
Options +Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)?$ index.php?url=$1 [L,NC]
Run Code Online (Sandbox Code Playgroud)

此结构放在我的服务器路径上 /beta

当我放置URL时,http://mydomain.com/beta/download一切都可以重写到真实路径http://mydomain.com/beta/index.php?url=download

问题发生在相对路径上.当我输入URL时http://mydomain.com/beta/download/box,重写转到http://mydomain.com/beta/index.php?url=download/box...但....

我所有的相对路径,像我的css文件夹,我的js文件,图像文件....一切都在我的index.php页面崩溃的相对路径的辩论,因为我的相对路径变download/css,download/js,download/images...等...

我知道这个问题是由于路径"download /"中的斜线而发生的,但我如何使用.htaccess中的mod_rewrite解决这个问题?

我可以阻止相对路径中的重写吗?甚至在我自己的域的内部路径?

如何在不改变绝对路径的相对路径的情况下解决这个问题?

谢谢

php apache mod-rewrite

5
推荐指数
1
解决办法
4833
查看次数

标签 统计

opengl ×2

shader ×2

3d ×1

apache ×1

c ×1

glsl ×1

math ×1

mod-rewrite ×1

objective-c ×1

opengl-es ×1

performance ×1

php ×1

types ×1