Java Android OpenGL ES 2.0,计算每个三角形的法线
我需要在Android中使用Opengl ES 2.0计算每个三角形面的法线(不是每个顶点)。但是我不能直接在片段着色器中传递属性 找到一个解决方案:为每个三角形重复顶点,并将三角形面法线作为属性传递到顶点着色器中 但我不想复制顶点。我正在使用顶点索引绘制三角形 所以,一个顶点被多个三角形共享,那么我应该如何计算三角形面法线Java Android OpenGL ES 2.0,计算每个三角形的法线,java,android,opengl-es,opengl-es-2.0,Java,Android,Opengl Es,Opengl Es 2.0,我需要在Android中使用Opengl ES 2.0计算每个三角形面的法线(不是每个顶点)。但是我不能直接在片段着色器中传递属性 找到一个解决方案:为每个三角形重复顶点,并将三角形面法线作为属性传递到顶点着色器中 但我不想复制顶点。我正在使用顶点索引绘制三角形 所以,一个顶点被多个三角形共享,那么我应该如何计算三角形面法线 p、 我是opengl的新手。最简单的解决方案就是复制顶点。顶点着色器很少成为瓶颈。我不知道您的具体需求,但是,在某些情况下,复制顶点并不是一个好的解决方案。例如,如果网格
p、 我是opengl的新手。最简单的解决方案就是复制顶点。顶点着色器很少成为瓶颈。我不知道您的具体需求,但是,在某些情况下,复制顶点并不是一个好的解决方案。例如,如果网格已蒙皮并设置动画,则意味着在顶点着色器中会发生大量计算。另一种情况是,网格在顶点着色器中以某种奇怪的方式设置动画,并且必须重新计算法线。显然,无法在顶点着色器中计算每面法线。您可以在几何体着色器中执行此操作,但在OpenGL ES 2.0中没有。然而,有一个简单的解决方案-在片段着色器中计算法线!因此,如果顶点复制不适用于您,以下是解决方案:
#extension GL_OES_standard_derivatives : enable
varying vec3 positionWorld;
uniform mat4 viewMatrix;
varying vec3 positionWorld;
uniform mat4 viewMatrix;
vec3 normalViewSpace = normalize(cross(dFdx(positionWorldSpace), dFdy(positionWorldSpace)));
这里,位置的导数是相对于屏幕空间中的x和y坐标的。这意味着我们有两个向量,在平面上。为了得到曲面的法线,我们做了一个叉积。当然,结果不是单位向量,所以我们还需要对其进行规格化vec3 normalWorldSpace = (vec4(normalViewSpace, 0.0) * viewMatrix).xyz;
vec3 ReconstructNormal(vec3 positionWorldSpace)
{
vec3 normalViewSpace = normalize(cross(dFdx(positionWorldSpace), dFdy(positionWorldSpace)));
vec3 normalWorldSpace = (vec4(normalViewSpace, 0.0) * viewMatrix).xyz;
return normalWorldSpace;
}
var容器;
摄像机、场景、渲染器;
var网格;
var制服;
var clock=新的三个时钟();
init();
制作动画();
函数init(){
container=document.getElementById('container');
摄像头=新的三个透视摄像头(40,window.innerWidth/window.innerHeight,0.1100);
摄像机位置z=0.6;
摄像机位置y=0.2;
摄像机旋转角度x=-0.45;
场景=新的三个。场景();
var boxGeometry=新的三个平面几何体(0.75,0.75,32,32);
var heightMap=THREE.ImageUtils.loadTexture("数据:图像/png;Bas64,IVBorww0.KGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAA数据:数据:图像/巴巴巴巴巴巴巴巴巴巴巴新;基础64,IBBBBB6,IB7,IB4,IB4,IB7,AAAAAAAAAAAAAAAAAAAA4,4,4,AA4,4,4,AAA4,4,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6研究结果表明,一个2 2 2个2 2个2 2个2个2个2个2个3个3个3个TTZ9/0个TZ6 6个TTZ9/0个TTZ9/6个TTZ6/6个TZ6/6个VVVQ6个VVQ6个VVQ6个VVQ6个VVQ6个VQ6个VQQ6个VVVVVQ6个VVQQQQQQQQ6个VVVVVVVVVQ6个VVVVVQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQEFIKNTP1KN5BM2FODMQDLUJIFY9EPAYNGSR9ZCNYCK0U+6.一个(6)一个(6)一个(6)一个(6)一个(6)一个(6)一个(6)一个(2)一个(2)一个(2)一个(2)一个(2)一个(2)一个(2)一个(6)一个(6)一个(6)一个(6)一个(6)一个(2)一个(2)两个(2)两个(2)一个(2)一个(2)一个(2)一个(2)一个)一个(2)一个(2)一个(2)一个(2)一个(2)一个(2)一个)一个(2)一个(2)一个(2)一个(2)一个(2)一个)一个(2)一个)一个(2)一个(2)一个(2)一个(2)一个)一个)一个(2个)GxMCZFGS+FpYktQ8b2OzVq2.目前,一些研究者提出了一种新的研究方法,即:一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个研究方向,一个,一个研究方向,XXGNSS6BP生物化石JUPGJUQ/GI/QWIYG0ILKMLCWWWWKUYUIDRQTDEJQT29JAIH6SYCv4YR2GASYKPZ586XJYX8IP4ZFME5HUOBUIVHJI5LKILLUNMAU5BUPHJJJJZKFF2TQSXLGXVSEHV0ULZC1RJ0C85MBW2K8CZLUWOCEIVADZA6JMPKBRCB0URC0PURCRAUP6H2BF044Z44XTZZ72DJ3JP5L67ROPS/OQRJJJJJJJ2J2J2JZ2VZZ2VZKK2VZKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKZ2Y2Y2KKKKKKKKKKKKKKKKKZ104)QQQP/MX-QQQQQQP/MX-QQQQQP/MX-QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQvvvvvvvvvvvvvvvvvvvvv6-vvv6-vvvvv6-vvvv6-vvvv6-vvvvvvvvvv6-vvvvvvvvvv6-vvvvvvvvvvvvvv6-vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvNRDRS2LJ4FJOEZNUHEBO3ATRUDA21QM6MAPGYNALOXY/Q