在iOS上使用OpenGL,是否可以更新一個小紋理(通過單獨設置每個像素),然後將其縮放以填充屏幕(每秒60幀)?每幀渲染一個小紋理,然後將其放大?
回答
你應該能夠更新使用glTexImage2D紋理的內容。
未經測試的例子:
GLubyte data[1024]; // 32x32 (power of two)
for (int i=0; i<1024; i+=4) {
// write a red pixel (RGBA)
data[i] = 255;
data[i+1] = 0;
data[i+2] = 0;
data[i+3] = 255;
}
glBindTexture(GL_TEXTURE_2D, my_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
// then simply render a quad with this texture.
一般來說,答案是肯定的,這是可能的。但這可能取決於你需要畫什麼。
既然你沒有提供更多的細節,我將描述的一般方法:
綁定一個紋理到幀緩衝(Here是如何做到這一點的代碼很好的解釋請參見「的例子。 6.10。初始化()用於超採樣「代碼示例)
現在畫出你需要的東西,就像你在屏幕上(變換,模型視圖矩陣等)一樣。如果您需要像素精度(修改每個像素),您可以考慮使用正交投影。如果這是可能的,取決於你需要畫什麼。所有這些繪圖都將在您的紋理上執行,以實現「更新紋理」部分。
綁定您使用的正常幀緩衝區以在屏幕上繪製。繪製一個使用上一步紋理的矩形(可能再次使用正交投影)。您可以縮放此矩形以填充屏幕。
如果上述方法能達到60 fps,取決於你的目標設備和你需要渲染的場景。
希望幫助
我在渲染當前場景到紋理不太感興趣。爲了澄清,我想在(offscreen?)紋理中明確設置每個像素,然後將其全屏顯示(放大,模糊確定)。紋理四分之一組合聽起來像是該部分的合理解決方案。我不清楚的是,是否可以直接在紋理中設置單個像素?像數組訪問。或者,我是否會將場景渲染爲正視圖中的一系列GL_POINTS以實現相同的效果? – aoakenfo
據我所知,像訪問數組一樣設置像素是不可能的。如果您可以設置整個紋理的值以便一次修改,則可以使用「GL_POINTS」。或者,您可以繪製任何2D幾何圖形,例如如果渲染一個四元組(假設屏幕的下半部分),則可以一次修改大量像素。如果你描述你需要在這個紋理上畫什麼,或許我可以提供更多的幫助 –
- 1. 渲染大紋理到更小的渲染緩衝區
- 2. 渲染紋理
- 3. 將每幀渲染爲單個圖像
- 4. OpenGL渲染紋理
- 5. Berkelium渲染紋理
- 6. Three.js渲染紋理
- 7. Direct3D9渲染一個D3DFMT_A8紋理
- 8. 渲染爲紋理,然後在OpenGL中渲染結果到屏幕
- 9. Three.js - 我可以渲染一系列幀,然後以高幀率播放?
- 10. '渲染到紋理'和多遍渲染
- 11. 在iOS上渲染大紋理OpenGL
- 12. FBO:在繪製渲染紋理時渲染紋理,錯誤的紋理映射
- 13. 渲染紋理不允許其他紋理顯示libgdx java
- 14. 渲染導致低幀率時使用多個紋理
- 15. 使用紋理作爲渲染目標時的大小限制
- 16. 將OpenGL FBO紋理渲染到GLXPixmap
- 17. 將視頻渲染到Direct3D 9.0c紋理
- 18. 將透明紋理渲染到glTexture
- 19. 將紋理渲染到窗口
- 20. 將Webkit渲染爲GL紋理
- 21. iOS將對象渲染爲紋理
- 22. 將像素渲染爲紋理
- 23. 將場景渲染爲紋理Three.js
- 24. OpenGL - 渲染成紋理
- 25. Opengl GLSL渲染紋理
- 26. 渲染紋理問題
- 27. WebGL紋理渲染部分
- 28. 的DirectX紋理渲染incorretly
- 29. LWJGL紋理不渲染
- 30. Direct3D渲染錯誤紋理
一旦我把它變成兩個冪的作品。謝謝。 – aoakenfo
噢,對不起,我會編輯答案。 – sharvey