我正在尝试创建程序,将允许我从Collada格式转换为我自己的自定义格式(这部分很容易控制)。我想做的事情如下。
1.)在给定从Collada文件解析的确切数据的情况下,找到一种方法来绘制模型。a.)一个简单的立方体将生成8个顶点,36个法线和12个纹理坐标,这是发现,但唯一的方法,我可以找到OpenGL绘制这需要我复制顶点和法线的数据,以便匹配法线的数量。
2.)找到一种实现多纹理的方法。a.)我找到了很多关于这方面的教程,但我似乎找不到一种真正使用它的方法。这些函数似乎没有内置到我的openGL版本中(我已经在两台计算机上尝试过了),也没有人记录我可能缺少的任何所需的dll。
发布于 2012-09-22 08:33:21
一个简单的立方体将生成8个顶点,36个法线和12个纹理坐标,
不,一个简单的立方体有8个位置,但一个顶点不仅仅是一个位置,还包含所有其他属性。所以实际上没有发生顶点重复,但你是对的,你会在属性中有一些冗余。
更新以解释,为什么会这样
顶点是其属性的整个向量。换一个,你就会得到一个完全不同的顶点。
假设您有一个顶点着色器,它接受一些纯抽象属性和一个纹理坐标
#version 150
attribute vec2 foobar;
attribute vec4 fnord;
attribute vec2 texcoord;这个顶点着色器根据这些属性计算一些位置,比如
void main() {
gl_Position = vec3(fnord.xw, dot(foobar,texcoord));
}如您所见,顶点位置现在直接取决于所有属性。当然,其他变体也可以。
为了保存冗余计算,GPU维护从顶点属性输入到变换阶段/顶点着色器输出的缓存映射。如果顶点是通过索引间接访问的,那么缓存实际上使用索引作为键。
因此请记住:如果与顶点关联的任何内容发生更改,您将更改整个顶点。在现代OpenGL中,顶点的属性,甚至位置,最终可能会做非常不同的事情。
我的openGL版本中似乎没有内置这些函数
哦,他们可能是你的司机的一部分,好吧。您可能只是没有将它们加载到您的程序中。OpenGL DLL只涵盖了最基本的内容。对于其他任何情况,您必须动态加载函数指针。只需使用像GLEW这样的很好的包装器(可从http://glew.sourceforge.net获得)。
https://stackoverflow.com/questions/12538261
复制相似问题