Câu trả lời:
OpenGL ES 2.0 hỗ trợ Sprites Point; tôi sử dụng chúng cho các hạt. Chỉ cần sử dụng glDrawElements
với GL_POINTS
.
Trong shader đỉnh, bạn đặt kích thước với gl_PointSize
và sử dụng gl_PointCoord
trong shader mảnh để ánh xạ kết cấu.
Shader đỉnh của tôi:
uniform mat4 uMvp;
uniform float uThickness;
attribute vec3 aPosition;
attribute vec2 aTexCoord;
attribute vec4 aColor;
varying vec4 vColor;
void main() {
vec4 position = uMvp * vec4(aPosition.xyz, 1.);
vColor = aColor;
gl_PointSize = uThickness;
gl_Position = position;
}
Mảnh vỡ của tôi shader:
uniform sampler2D tex0;
varying vec4 vColor;
void main()
{
gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}
Nếu bạn đang ở trên Android, bạn có thể xem Hướng dẫn tiếng Pháp của tôi . Có một dự án đầy đủ với các sprite điểm.
Đáng ngạc nhiên, glLineWidth () làm cho điểm lớn hơn:
GLES20.glLineWidth(8); // Make the edges (and points!) thicker
GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes
OpenGLES 2.0 không hỗ trợ trực tiếp các sprite điểm. Bạn có thể tạo họa tiết cho các điểm ảnh của mình hoặc tạo thủ công một góc đối diện với camera và hướng camera ở giữa.
float
độ chính xác trong các shader mảnh - chúng không cófloat
độ chính xác mặc định và trên một số trình điều khiển, các shader như vậy có thể không biên dịch được.