繁体   English   中英

在opengl-es 2.0中,每个顶点可能有多个法线

[英]is it possible to have multiple normals per vertex in opengl-es 2.0

目前我为我的模型使用每个顶点一个法线,但这相当于使模型在光照方面看起来圆润,这是不理想的,因为我的模型意味着有锋利的边缘。 谷歌搜索告诉我,它似乎不可能在opengl-es 2.0中使用曲面法线,但替代技术是使用每个顶点的多个顶点法线来表现就像使用曲面法线一样。

这意味着正常数组和顶点数组的索引缓冲区需要不同,因为例如,一个立方体将有8个顶点,但每个顶点需要3个法线才能像表面法线一样(每个连接面一个)如果模型是三角形的,那么多维数据集可能需要更多,这是开放式的需要)。 所以顶点的索引数组为8,法线的索引数组为8x3 = 24。

有谁知道怎么做这个?

目前我的代码看起来像这样

glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);

glGenBuffers(1, &_indexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices*sizeof(GLubyte), indices, GL_STATIC_DRAW);

glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, numVertices*sizeof(GLfloat), vertices, GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribPosition);        
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 0, 0);

glGenBuffers(1, &_normalBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _normalBuffer);
glBufferData(GL_ARRAY_BUFFER, numNormals*sizeof(GLfloat), normals, GL_STATIC_DRAW);

glEnableVertexAttribArray(GLKVertexAttribNormal);
glVertexAttribPointer(GLKVertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 0, 0);

每个顶点不能有多个法线,并且法线和位置不能有不同的索引。

唯一的方法是复制您的位置数据,并为每个位置附加不同的法线。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM