ขนาด Sprite OpenGL ES 2.0 Point


15

ฉันกำลังพยายามวาด sprite พอยต์ใน OpenGL ES 2.0 แต่จุดทั้งหมดของฉันจบลงด้วยขนาด 1 พิกเซล ... แม้ว่าฉันจะตั้งค่า gl_PointSize ให้มีค่าสูงใน Shader ของฉันก็ตาม

ฉันจะทำให้จุดสไปรต์ของฉันใหญ่ขึ้นได้อย่างไร

คำตอบ:


24

OpenGL ES 2.0 รองรับ Point Sprites; ฉันใช้มันเป็นอนุภาค เพียงแค่ใช้glDrawElementsGL_POINTSมี

ใน Shader ที่คุณตั้งขนาดด้วย gl_PointSizeและใช้gl_PointCoordในส่วน Shader สำหรับการทำแผนที่พื้นผิว

จุดสุดยอดของฉัน:

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;  
}

ส่วนย่อยของฉัน:

uniform sampler2D tex0;
varying vec4 vColor;

void main() 
{
   gl_FragColor = texture2D(tex0, gl_PointCoord) * vColor;
}

ถ้าคุณอยู่ใน Android คุณสามารถดูการสอนภาษาฝรั่งเศสของฉัน มีโครงการเต็มรูปแบบที่มีสไปรต์จุด


อย่าลืมระบุfloatความแม่นยำอย่างชัดเจนในตัวแยกส่วน - พวกมันไม่มีfloatความแม่นยำเริ่มต้นและในไดรเวอร์บางตัวเช่นตัวแปลงอาจไม่สามารถคอมไพล์ได้
keaukraine

1

น่าแปลกใจที่ glLineWidth () ทำให้คะแนนใหญ่ขึ้นเช่นกัน:

    GLES20.glLineWidth(8); // Make the edges (and points!) thicker
    GLES20.glDrawArrays(GLES20.GL_POINTS, 0, 38);// 38 is number of my vertexes

คุณเป็นฮีโร่ บ๊อบอวยพร
netpoetica

0

OpenGLES 2.0 ไม่สนับสนุน sprite point โดยตรง คุณสามารถพื้นผิว glPoints ของคุณหรือสร้างรูปสี่เหลี่ยมหันหน้าเข้าหากล้องและตั้งศูนย์กล้องด้วยตนเองที่กึ่งกลางจุด


5
เท็จ ใช้ GL_POINTS และ gl_PointSize เป็นจุดสุดยอด
เอลลิส

@ เอลลิสเขาพูดอย่างนั้น ถ้าคุณดูที่ลิงค์ที่โพสต์มันจะพูดถึงส่วน GL ES 1 ที่เลิกใช้แล้วและวิธี "พื้นผิว glPoints ของคุณ"
bobobobo
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.