我正在为iPhone开发一个简单的2D OpenGL游戏.我的问题是我想使用不同的色调渲染纹理.基本上我想改变我渲染的纹理中的颜色的色调.简单地改变glColor是行不通的,因为它也会影响图像中没有颜色的部分.有任何想法吗?
我需要为2D空间滚动射击者绘制背景.我需要实现3层恒星:一个远处的星云(移动得非常慢)在背景中,一层远处的恒星(移动缓慢)和一层近距离恒星(正常移动)在另外两颗恒星之上.
我第一次尝试这种方式的方法是使用3个320 x 480的纹理,它们是透明的星星.我使用了GL_BLEND和SRC_ALPHA,ONE_MINUS_SRC_ALPHA.
即使在3GS上,结果也不是很好.在第一代设备上,FPS下降到40..50所以我认为我这样做是错误的.
当我禁用GL_BLEND时,即使在第一代设备上也一切都很好,并且FPS再次回到60 ......所以我必须尝试贴上大透明纹理.
问题是我不知道如何以其他方式做到这一点......
我应该只画出不透明纹理的第一个星云,然后尝试模仿中间和顶部的星星层,在屏幕周围移动小点吗?
混合问题还有其他方法吗?如何加快渲染过程?一个大的纹理(tileset)答案是什么?
请帮帮我,因为我被困在这里,我无法离开.
我正在修复我的第二个应用程序,这将是一个游戏,我想开始学习OpenGL ES.我还没有找到很多教授opengl es的书,所以我想找出最好的学习方法.我想要达到几乎专家的水平,因为我希望有一天能成为一名全职手机游戏开发者.
我见过Jeff LaMarches教程,我知道NeHe教程.我个人正在考虑购买OpenGL蓝皮书(下面的链接)并首先学习OpenGL.主要是因为我在大学里学过科学可视化课程,但没有使用opengl或directx,我需要更多地了解基础知识.
那么,对于那些还在我身边的人来说,学习OpenGL ES的建议是什么?
我真的无法理解这个:
以前我无法让Framebuffers工作,但我现在已经开始了.然而,这种令人难以置信的奇怪镜像正在从帧缓冲器生成纹理,我不知道为什么.基本上,我将尝试使用GL_TRIANGLE_FAN在0,0处绘制纹理,并且纹理在右上角显示为正常(或多或少),但也出现在左下角,镜像.如果我用相同的纹理填充我的大部分或全部视口区域,结果是一个丑陋的z-fighting重叠.
屏幕截图将更加正义.
原始图片:
原文http://img301.imageshack.us/img301/1518/testsprite.png
绘制80x80 at(0,0)
80x80 http://img407.imageshack.us/img407/8339/screenshot20100106at315.png
在(0,0)绘制100x180
100x180 http://img503.imageshack.us/img503/2584/screenshot20100106at316.png
在(0,0)绘制320x480
320x480 http://img85.imageshack.us/img85/9172/screenshot20100106at317.png
这是我的代码:
设置视图:
//Apply the 2D orthographic perspective.
glViewport(0,0,320,480);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(0, 320, 480, 0, -10000.0f, 100.0f);
//Disable depth testing.
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glDisable(GL_DEPTH_TEST);
//Enable vertext and texture coordinate arrays.
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glShadeModel(GL_SMOOTH);
glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
glGetError(); // Clear error codes
sprite = [Sprite createSpriteFromImage:@"TestSprite.png"];
[sprite retain];
[self createTextureBuffer];
Run Code Online (Sandbox Code Playgroud)
创建纹理缓冲区.
- (void) createTextureBuffer
{
// generate texture
glGenTextures(1, &bufferTexture);
glBindTexture(GL_TEXTURE_2D, bufferTexture);
glTexImage2D(GL_TEXTURE_2D, 0, …Run Code Online (Sandbox Code Playgroud) 我在UIImageView中有一个PNG文件,旁边有一个EAGLView,它显示同一图像(长故事)作为纹理的延续,由同一个原始PNG雕刻而成.关键是,这些应该完美匹配的图像实际上具有稍微不同的色彩饱和度.
通常我会责怪我在GL中处理PNG纹理加载,但是当我将预览(使用PNG)保持到iPhone模拟器时,它就是GL的亮点,而UIImageView则错了!它采取了图像,使它变得更加饱和.图像视图不透明,100%alpha.
我在一个干净的UIImageView上用另一个PNG文件验证了这个,当放在预览旁边时.
谁知道怎么了?
我目前正在为iPad开发OpenGL ES 1.1应用程序
它以完整的768x1024 iPad分辨率运行,具有纹理,多边形和作品
但只有大约30帧/秒!(对我来说不够快)
我很确定它不是我的代码,因为当我降低分辨率时,FPS增加,最终在iPod touch resoultion正常60
是否有其他人遇到这种FPS减速?我应该缩小尺寸然后放大吗?...还有,升级到opengl 2.0会增加速度吗?
任何指导都非常感谢!
我试图使用opengl在xcode内部创建一个旋转的方块但是由于某种原因我有一个旋转的三角形?
我在sio2里面做这个,但我不认为这是问题所在.
这是三角形:http: //img220.imageshack.us/img220/7051/snapzproxscreensnapz001.png
这是我的代码:
void templateRender( void )
{
const GLfloat squareVertices[] ={
100.0f, -100.0f,
100.0f, -100.0f,
-100.0f, 100.0f,
100.0f, 100.0f,
};
const unsigned char squareColors[] = {
255, 255, 0, 255,
0, 255, 255, 255,
0, 0, 0, 0,
255, 0, 255, 255,
};
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glClear( GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );
// Your rendering code here...
sio2WindowEnter2D( sio2->_SIO2window, 0.0f, 1.0f );
{
glVertexPointer( 2, GL_FLOAT, 0, squareVertices );
glEnableClientState(GL_VERTEX_ARRAY);
//set up the color array …Run Code Online (Sandbox Code Playgroud) 我的iPhone上的应用程序带有UIViewController,其中包含一些内容..图像,文本框等...有没有办法在UIViewController中直接使用opengl绘制一条线或类似的东西?
提前致谢
尝试让OpenGL ES在iPhone上运行起来相当新,但我已经从OpenGL模板创建了一个工作演示,并希望将它添加到另一个应用程序,这是一个标准的UIViewController应用程序.在搜索之后,似乎我无法将CASAGLLayer的子视图添加到CALayer,即UIView.我该怎么做呢?或者我在做什么完全错了.
欢呼任何帮助
以下文字有点长,因为我想确保那些有类似问题的人,例如google这个页面可以轻松地轻松地遵循确切的问题及其解决方案.但现在我的问题:
我最近开始在Android智能手机上编程OpenGL ES,并且遇到了解如何使用gluPerspective和gluLookAt的问题.我想我明白他们做了什么,但我看不到我画的三角形.我在我的活动的onDrawFrame方法中运行以下代码.所述活动使用标记为@Override的onDrawFrame实现GLSurfaceView.Renderer.我的代码是:
gl.glViewport(0, 0, screen_width, screen_height);
gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f); //set background to black
gl.glClearDepthf(1.0f);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
gl.glMatrixMode(GL10.GL_PROJECTION); // Change PROJECTION matrix
gl.glLoadIdentity();
float aspect_ratio = (float) screen_width / screen_height;
GLU.gluPerspective(gl, 67, aspect_ratio, 1, 100);
gl.glEnable(GL10.GL_DEPTH_TEST);
gl.glMatrixMode(GL10.GL_MODELVIEW); // Change MODELVIEW matrix
gl.glLoadIdentity();
GLU.gluLookAt(gl, 0, 0, 20, 0, 0, 0, 0, 1, 0);
// make triangle with vertices (-2,0,0), (2,0,0), and (0,.5,0)
float[] vertices = { -2f, 0, 0, 2f, 0, 0, 0, .5f, 0 };
ByteBuffer …Run Code Online (Sandbox Code Playgroud)