可能这个问题的标题听起来有点不对劲.
我正在尝试按照本教程http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.html 进行OpenGL 3.3,但我想我可以从中学到很多东西.所以我试图在OpenGLES 2中翻译它.
作者谈到这个功能glEnableVertexAttribArray(0);说:
在本教程中,我们还没有使用任何着色器,但是我们已经加载到缓冲区中的顶点位置被视为固定功能管道中的顶点属性索引0(当没有着色器绑定时它变为活动状态).您必须启用每个顶点属性,否则管道将无法访问这些数据.
这是我第一次尝试使用没有着色器的OpenGLES 2.有可能的?
我有一个bars包含几个彩色框对象的向量.每个框对象都有自己的绘图和更新功能.每个盒子从屏幕的一侧移动到下一侧.当它在屏幕外时,应该移除该框.我正在使用迭代器移动框并确定它们何时在屏幕之外.
我对c ++很新,我无法让代码工作.从向量中擦除对象的功能给了我错误Reference to non static member function must be called.我正在阅读静态和非静态成员,但我仍然有点迷失.
这是我的主头文件及相关代码
class game : public ofxiPhoneApp {
public:
void setup();
void update();
void draw();
void exit();
vector <Colorbar> bars;
bool checkBounds (Colorbar &b);
};
Run Code Online (Sandbox Code Playgroud)
在我的game.mm文件中,我创建了矢量并迭代它以设置彩色条形对象的属性:
void game::setup(){
bars.assign(5, Colorbar());
for (int i = 0; i<bars.size(); i++) {
ofColor color = colors.giveColor();
bars[i].setup();
bars[i].setColor(color.r,color.g,color.b);
bars[i].setWidth(50);
bars[i].setPos(ofGetScreenHeight()-(i*50), 0);
}
}
Run Code Online (Sandbox Code Playgroud)
更新功能可在屏幕上移动条形图.
void game::update(){
for(vector<Colorbar>::iterator b = bars.begin(); b != bars.end(); b++){
(*b).update();
}
//this is the part …Run Code Online (Sandbox Code Playgroud) 我从另一个项目复制一些代码,我在以前的项目中工作正常但在新项目中我得到链接错误:
OpengLWaveFrontCommon.h:50:22:错误:无法使用'void*'类型的右值初始化'VertexTextureIndex*'类型的变量 VertexTextureIndex*ret = malloc(sizeof(VertexTextureIndex));
这个文件(OpengLWaveFrontCommon.h)是openGL iPhone项目的一部分:Wavefront OBJ Loader.https://github.com/jlamarche/iOS-OpenGLES-Stuff
我应该制作一些特殊的旗帜还是什么,因为它是C结构的?
#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES1/gl.h>
#import <OpenGLES/ES1/glext.h>
typedef struct {
GLfloat red;
GLfloat green;
GLfloat blue;
GLfloat alpha;
} Color3D;
static inline Color3D Color3DMake(CGFloat inRed, CGFloat inGreen, CGFloat inBlue, CGFloat inAlpha)
{
Color3D ret;
ret.red = inRed;
ret.green = inGreen;
ret.blue = inBlue;
ret.alpha = inAlpha;
return ret;
}
#pragma mark -
#pragma mark Vertex3D
#pragma mark -
typedef struct {
GLfloat x;
GLfloat y;
GLfloat z;
} Vertex3D;
typedef …Run Code Online (Sandbox Code Playgroud) 例如在cocos2D中:
- (void)update:(ccTime)delta
Run Code Online (Sandbox Code Playgroud)
谁能解释这些时间增量或时间戳用于什么?它们如何与游戏世界的更新相关?是因为我们不能可靠地知道fps而不应该只依赖于基于-update调用的增量属性更新?
到目前为止我虽然glOrtho设置了一个正面相机,而gluPerspective设置了一个透视相机.
但是如果我在gluPerspective之前有一个glOrtho调用,那么这也会影响透视摄像机所在的位置.
例如:
gl.glMatrixMode(GL10.GL_PROJECTION);
gl.glOrthof(0, 1, 0, 2, -100, 100);
GLU.gluPerspective(gl, 90, 1, 0.1f, 100.0f);
gl.glMatrixMode(GL10.GL_MODELVIEW);
GLU.gluLookAt(gl, 0f, 0f, -5.0f,
0f, 0f, 0.0f,
0.0f, 1.0f, 0.0f);
Run Code Online (Sandbox Code Playgroud)
这将把我的对象放在右下角.但我希望gluPerspective能够覆盖glOrtho
更新到之后Xcode 6.0.1,我的项目在链接阶段构建错误.我不知道为什么,但我确信这是关于什么的OpenGLES.因为当我删除关于它的代码时,它构建正常.
以下是完整的错误消息:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_EAGLContext", referenced from:
objc-class-ref in PPSSignatureView.o
"_glDisable", referenced from:
-[PPSSignatureView setupGL] in PPSSignatureView.o
"_glGenVertexArraysOES", referenced from:
-[PPSSignatureView setupGL] in PPSSignatureView.o
"_glGenBuffers", referenced from:
-[PPSSignatureView setupGL] in PPSSignatureView.o
"_glBufferData", referenced from:
-[PPSSignatureView setupGL] in PPSSignatureView.o
"_glVertexAttribPointer", referenced from:
-[PPSSignatureView bindShaderAttributes] in PPSSignatureView.o
"_glDeleteVertexArraysOES", referenced from:
-[PPSSignatureView tearDownGL] in PPSSignatureView.o
"_glMapBufferOES", referenced from:
_addVertex in PPSSignatureView.o
"_glDrawArrays", referenced from:
-[PPSSignatureView drawRect:] in PPSSignatureView.o
"_glBindBuffer", referenced from:
-[PPSSignatureView tap:] in PPSSignatureView.o …Run Code Online (Sandbox Code Playgroud) 我的问题类似于如何使点轨道成为直线,3D,但那里的答案似乎并不能解决我的问题。我正在寻找的是一种通用的解决方案。
作为记录,我正在尝试解决OpenGL ES(Java / Android)中的问题。
我有一个以3D点为中心的圆,一个半径和一个3D矢量,指定该圆所处平面的法线。
我需要找到一个3D点,该点代表与“旋转的” X轴(根据法向矢量旋转)成给定角度的圆周上的点。
我已经在Circle成员函数的类中有一个实现,该实现在pointAt有限的情况下有效。具体来说,在我当前的实现中,我假定圆位于XY平面中并相应地返回一个点,然后,由于我知道圆实际上位于XZ平面中,因此我只需在返回的点中交换Y和Z值即可。但是,这不是一般的解决方案,而这正是我需要的。
当我尝试了如何使点轨道变成直线3D中给出的算法时,我得到的点与应有的位置相差很远。
那么,如何计算这样一个圆的圆周上的点呢?
[编辑]我想我的解释还不够。我的假设是,圆在XY平面中“正常”,在Z方向上的法向矢量为(0,0,1)-1。如果需要圆周上的一点,则该点定义为:
x = R*cos(a) + Cx
y = R*sin(a) + Cy
Run Code Online (Sandbox Code Playgroud)
其中R是半径,Cx和Cy是X与Y所述圆的中心的坐标,并且a是从一个矢量的角度通过所述圆的圆心点和与所述X轴平行。
现在,如果圆没有沿Z轴指向的法线向量,而是某个任意(x,y,z)向量,那么如何找到相同的点?
我正在学习opengl.
我来了一个像drawXXXXXXX这样的函数,其中一个参数是大步的......
我不知道用法,也不知道步幅的含义.
anyoe可以告诉我吗?
我想从webgl获取纹理就像我getImageData()在画布上下文为2d时可以使用的那样.
我怎样才能获得webgl上下文的纹理?
有没有人知道存在的ThreeJS到WebGL转换器?另外,您能否给我一些关于如何制作ThreeJS到WebGL转换器的见解?