我是一個新手,並嘗試使用OpenGL ES在我的iPhone屏幕上顯示一個精靈。 我知道它更簡單,更容易做到與cocos2d,但現在我試圖直接在OpenGL上編碼。 是否有任何簡單而有效的方式來加載和顯示OpenGL ES中的精靈。我到目前爲止發現的情況要複雜得多。 :(如何在用於iphone的OpenGL ES中加載和顯示圖像
10
A
回答
15
下面是一些代碼從束加載PNG:
UIImage* image = [UIImage imageNamed:@"PictureName.png"];
GLubyte* imageData = malloc(image.size.width * image.size.height * 4);
CGContextRef imageContext = CGBitmapContextCreate(imageData, image.size.width, image.size.height, 8, image.size.width * 4, CGColorSpaceCreateDeviceRGB(), kCGImageAlphaPremultipliedLast);
CGContextDrawImage(imageContext, CGRectMake(0.0, 0.0, image.size.width, image.size.height), image.CGImage);
CGContextRelease(imageContext);
下面是一些代碼來創建與該圖像數據的紋理
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image.size.width, image.size.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, imageData);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
而如何的一個例子渲染:
glBindTexture(GL_TEXTURE_2D, texture);
glVertexPointer(2, GL_FLOAT, 0, vertices);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, textureCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4)
在這裏,你需要找到適合你的頂點,法線和textureCoords的值需要。
更新1
一定要設置正確的狀態是這樣的:
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
如果使用glOrthof
(見下文)在您的應用程序設置一個2D投影,您可以使用這些值:
GLfloat vertices[] = {
-1.0, 1.0,
1.0, 1.0,
-1.0, -1.0,
1.0, -1.0, };
GLfloat normals[] = {
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0,
0.0, 0.0, 1.0 };
GLfloat textureCoords[] = {
0.0, 0.0,
1.0, 0.0,
0.0, 1.0,
1.0, 1.0 };
更新2
這是使用上面的代碼時呈現精靈怎麼坐在投影模式:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-5.0, 5.0, -7.5, 7.5, -1, 1);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
這也是我怎麼設置我的混合功能。這允許在PNG文件中的透明度:
glEnable(GL_TEXTURE_2D);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
4
我建議看看蘋果的GLSprite示例應用程序。這正是這個應用程序所做的。
如果你想加載PVRTC壓縮紋理,請看他們的PVRTextureLoader例子。我使用我爲我的iPhone課寫的sample application中的代碼。
相關問題
- 1. OpenGL ES 2 - 加載和顯示圖像
- 2. 如何使用C++在OpenGL ES 3.0中加載和顯示圖像
- 3. 在OpenGL ES中加載非冪次的圖像iPhone
- 4. 如何更改ios中用於OpenGL的圖像格式? (將圖像加載到OpenGL ES 2.0)
- 5. OpenGL ES 2.0 2D圖像顯示
- 6. android openGL es 2沒有顯示圖像
- 7. 在iPhone上的OpenGL ES中,如何滾動兩個圖像?
- 8. 從iPhone中的C++代碼將圖像載入到OpenGL ES中
- 9. 如何在openGL ES中移動圖像?
- 10. 如何在OpenGL ES for iPhone中顯示視頻?
- 11. iPhone的OpenGL-ES:在OpenGL UISwipeGestureRecognizer
- 12. 如何在加載iphone應用程序時顯示圖像?
- 13. 異步紋理加載iPhone OpenGL ES 2
- 14. 如何在opengl中加載圖像
- 15. OpenGL ES 2.0在iPhone模擬器中顯示正常,但在iPhone上不顯示
- 16. OpenGL ES 2.0中的圖像和蒙版
- 17. 在ActionScript中加載和顯示圖像
- 18. 如何使用OpenGL ES渲染圖像?
- 19. 在opengl中顯示圖像
- 20. 在openGL中加載圖像
- 21. OpenGL ES:在視圖下方顯示
- 22. 如何在加載大圖像時顯示加載圖像?
- 23. iPhone OpenGL ES - 如何選擇
- 24. 在Android的OpenGL ES應用程序開始時顯示加載圖標
- 25. 如何在視圖中自動加載和顯示圖像(Codeigniter)
- 26. 用於圖像處理的OpenGL ES 2.0着色器示例?
- 27. 如何在OpenGL ES中加載和綁定紋理?
- 28. Iphone上的OpenGl ES - 顯示和旋轉3D對象
- 29. OpenGL ES For iPhone
- 30. iPhone OpenGL ES
哪個版本的OpenGL ES,1或2? – 2010-08-02 11:14:45
我正在使用ES 1. – nomann 2010-08-02 11:15:36