我正在尝试使用8个顶点的数组和24(4 *6)个索引的索引数组渲染一个立方体到顶点数组中.但是如何在不使用弃用函数的情况下指定每个变量(如颜色和法线)?为此,我需要一组单独的索引,但是当我指定两个索引数组(GL_ELEMENT_ARRAY_BUFFERs)并将它们指向不同的着色器变量(两次调用glVertexAttribPointer)时出现问题,并且它不会呈现任何内容(但不会t报告任何错误 - 用glGetError检查).我是否必须为每个面使用不同的glDrawElements调用,颜色和法线加载到统一变量中?
为了澄清,当8个顶点中的每一个都是不同面的一部分并且需要不同的颜色和法线值时,就会出现问题.
我有一点经验编写的OpenGL 2应用程序并希望使用OpenGL 3为此,我已经买了艾迪生韦斯利"红书"和"橙色书"(GLSL)的descirbe的固定功能的折旧和学习新的可编程管道(着色器).但是我无法理解的是如何构建一个具有多个对象的场景而不使用已弃用的translate*,rotate*和scale*函数.
我以前在OGL2中做的是使用translate和rotate函数在3D空间中"移动",并使用glBegin ... glEnd在本地坐标中创建我想要的对象.在OGL3中,这些函数都被弃用了,据我所知,它被着色器取代.但是我不能为我制作的每一个对象调用着色器程序,是吗?这不会影响所有其他对象吗?
我不确定我是否已经解释了我的问题令人满意,但其核心是如何使用OpenGL 3.1中本地坐标中定义的多个对象编程场景.我发现的所有初学者教程只使用一个对象而没有/解决这个问题.
编辑:想象一下,你想要两个旋转立方体.手动修改每个顶点坐标会很痛苦,你不能简单地修改模型视图矩阵,因为这样可能会使摄像机围绕两个静态立方体旋转......
我正在Jasmine中编写一个自定义匹配器(1.3,但问题也适用于 2.0),它扩展了内置匹配器的功能。如何使用另一个实际值调用内置匹配器?我尝试这样做expect(otherActual).toEqual(expected),但这返回未定义。
我尝试过的实际代码:
var customMatchers = {
toHaveAttributes: function (expected) {
if(!this.actual) {
throw new Error("Test parameter is " + this.actual);
}
if(!(this.actual instanceof Backbone.Model)) {
throw new Error("Test parameter must be a Backbone Model");
}
var notText = this.isNot ? " not" : "";
var actualAttrs = this.actual.attributes;
this.message = function () {
return "Expected model to" + notText + " have attributes " + jasmine.pp(expected) +
", but was " + jasmine.pp(actualAttrs);
}; …Run Code Online (Sandbox Code Playgroud)