我正在开发一个跨平台的OpenGL项目,当我尝试在Windows中加载它们时,共享GLcontext的所有纹理似乎都有问题.我被告知在Windows上的旧版OpenGL中不支持这一点,但似乎必须有一些方法在Windows上分享OpenGL中的纹理资源.如果没有办法在windows上的opengl中的多个对象之间共享纹理,这对某些应用程序来说是一个难以忍受的瓶颈,所以我认为现在必须克服这个限制.
我正在使用Visual Studio 2008,开发一个OpenGL窗口.我创建了几个用于创建骨架的类,一个用于关节,一个用于皮肤,一个用于Body(用于多个关节和皮肤),另一个用于读取一个skel/skin文件.
在我的每个类中,我使用指针来处理我的大部分数据,其中大多数是使用= new int [XX]声明的.我使用delete [XX]为每个删除指针的类都有一个析构函数.
在我的GLUT显示功能中,我让它声明一个正文,打开文件并绘制它们,然后删除显示结尾处的正文.但是程序中某处仍然存在内存泄漏.随着时间的推移,它的内存使用量会以一致的速度不断增加,我将其解释为不被删除的内容.
我不确定它是否在过度显示功能中只是不删除Body类或其他东西.我已经按照Visual Studio 2008中的内存泄漏检测步骤进行了操作,它没有报告任何泄漏,但我不能100%确定它是否适合我.我不会精通C++,所以我可能会忽略一些东西,有人能看到它吗?
从主要:
void display(void){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Body *body = new Body();
body->readSkel("C:\\skel2.skel");
body->drawBody();
body = new Body();
body->readSkel("C:\\skel1.skel");
body->drawBody();
glutSwapBuffers();
body->~Body();
delete body;
}
Run Code Online (Sandbox Code Playgroud)
来自身体:
Body::Body(){
skelFile = string();
skinFile = string();
totalJoints = 0;
joints = new Joint[25];
skin = new Skin;
}
Body::~Body(){
delete[25] joints;
delete skin;
}
Run Code Online (Sandbox Code Playgroud) 我知道CGFloat应该在Cocoa应用程序中使用,以使它们64位清理.但是在一个简单的OpenGL游戏中,使用Cocoa/Objective-C进行除渲染之外的所有事情(对于NSOpenGLView)呢?CGFloat是Core Graphics的一部分,所以如果我也可以使用CGPoint,CGRect等?或者我应该自己写一些rects和vector以及那种东西?
基本上可以将OpenGL与CoreGraphics类型混合使用吗?
我正在尝试获取VBO插件的地址.在我的stdafx.h中,我有gl.h,glext.h和wglext.h
如果我这样做:glGenBuffersARB =(PFNGLGENBUFFERSARBPROC)wglGetProcAddress("glGenBuffersARB"); glGenBuffersARB(0,0);
在stdafx.cpp中,这将编译.但如果我尝试使用glGenBuffersARB(0,0); 在我得到的任何其他h或cpp文件中:
Error 11 fatal error LNK1169: one or more multiply defined symbols found C:\Users\Josh\Documents\Visual Studio 2008\Projects\Vectorizer Project\Release\Vectorizer Project.exe
Error 10 error LNK2005: _glGenBuffersARB already defined in OGLENGINE.obj stdafx.obj
Run Code Online (Sandbox Code Playgroud)
这样做的正确方法是什么,所以我可以在我的代码中的任何地方使用vbo扩展?
谢谢
从现在开始javascript被浏览器编译成机器代码.我想知道哪种编程语言在java和javascript之间获得了更好的性能.我正在考虑编写一个3D浏览器FPS或MMO,并试图在两者之间做出决定.
还有什么关于兼容性的想法?看起来像java和opengl我可以比使用javascript和webgl更多的受众,因为IE尚未宣布支持.
我是OpenGL的新手.我正在使用JOGL.
我有一个WorldEntity代表可以渲染的东西的类.它有像position和的属性size.要渲染,我一直在使用这种方法:
/**
* Renders the object in the world.
*/
public void render() {
gl.glTranslatef(getPosition().x, getPosition().y, getPosition().z);
gl.glRotatef(getRotationAngle(), getRotation().x, getRotation().y, getRotation().z);
// gl.glScalef(size, size, size);
gl.glCallList(drawID);
// gl.glScalef(1/size, 1/size, 1/size);
gl.glRotatef(-getRotationAngle(), getRotation().x, getRotation().y, getRotation().z);
gl.glTranslatef(-getPosition().x, -getPosition().y, -getPosition().z);
}
Run Code Online (Sandbox Code Playgroud)
我一直在使用的模式是应用实体的每个属性(如位置或旋转),然后撤消它以避免破坏下一个实体被渲染的状态.
取消注释缩放行导致应用程序更加缓慢,因为它在我的适度计算机上呈现适度的场景.我猜测浮动除法太多,无法处理每秒数千次操作.(?)
这是怎样的正确方法?我可以找到一种计算量较小的方法来撤消缩放转换吗?我是否需要按比例对对象进行排序并绘制它们以减少所需的缩放变换?
谢谢.
我在这里做错了吗?
我在整个屏幕上绘制一个四边形 glRectf( -1, -1, 1, 1 )
我的程序的FPS大约下降了5000.
这是我的OpenGL初始化:
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glViewport( 0, 0, width, height );
glOrtho( 1, -1, 1, -1, 1, -1 );
glMatrixMode( GL_MODELVIEW );
glDisable( GL_DEPTH_TEST );
Run Code Online (Sandbox Code Playgroud) 有没有办法发送像这样的结构:
struct COLOR {
float r, g, b, a;
};
Run Code Online (Sandbox Code Playgroud)
直接将glColor*()函数作为一个参数?会使代码更好.
我可以自己创建函数并将每个R,G,B,A值分别发送到glColor4f(),但这不会那么好.因此,我正在寻找一种尽可能以最佳方式发送它的方法.
可能重复:
OpenGL还是DirectX?
不想引发战争,但真的想知道那两个主流图形库的利弊吗?
我是OpenGL的新手,但这是我的问题:
我正在写一个世界创造者(对于Lego Duplo Blocks),我在3dsmax中制作了我的块,然后将它们导出到.obj文件.然后我创建了一个解析器来解析文件.我基本上把所有东西放在glNewList中.然后对于每个legoblock我有一些参数(包含它们应该在te x和z轴上转换的值(y轴尚未))我用它来改变它们在列表被调用后的位置(块通过使用方向键).
现在,在创建新块时,我想创建某种形式的碰撞检测,这样当新块出现在已经由另一个块占据的位置时,该块会自动进入另一个块的顶部(因此将其转换为y -轴).
有没有办法让你的某个物体的世界坐标?或者还有另一种更好的方法来做我想做的事情吗?
请帮帮我吧!
提前致谢 !
opengl ×10
c++ ×4
java ×2
c ×1
cocoa ×1
directx ×1
freeglut ×1
javascript ×1
jogl ×1
macos ×1
memory-leaks ×1
objective-c ×1
share ×1
windows ×1