คำถามติดแท็ก opengl-es2

OpenGL ES 2.0 เน้นไปป์ไลน์กราฟิก 3 มิติที่ตั้งโปรแกรมได้ (เปรียบเทียบกับไปป์ไลน์ฟังก์ชันคงที่ของ OpenGL ES 1.1)

5
การเรนเดอร์ / การแรเงาเป็นไปได้ด้วย OpenGL ES 2.0 หรือไม่
ฉันถามสิ่งนี้ในStackOverflowแต่อาจเหมาะสมกว่าที่นี่: มีใครใช้การเรนเดอร์ / การแรเงาภายใต้ OpenGL ES 2.0 หรือไม่ ไม่รองรับ MRTs ด้วยบัฟเฟอร์สีเดียวมันไม่ใช่สิ่งที่สามารถนำมาใช้ในลักษณะ "ปกติ" โดยเฉพาะฉันกำลังสำรวจบน iPad, iPhone4 (maaaybe iPhone 3gs) และ Android ในแอป GLESView บน iPad / iPhone4 / iPhone3gs มีส่วนขยาย GL_OES_RGB8_RGBA8 อยู่และฉันยังไม่ได้ดูลึกเกินไป แต่ด้วย 8 บิต / ช่องแนวคิดนี้น่าสนใจ: http://www.gamedev.net/topic/ 562138-OpenGL ES--20-และรอการตัดบัญชี-แรเงา / ความคิดอื่น ๆ ? มันคุ้มค่าที่จะทำประสิทธิภาพที่ชาญฉลาด?

2
OpenGL: ที่ไหนที่ฉันใส่ shoud อยู่ที่ไหน
ฉันพยายามเรียนรู้ OpenGL ES 2.0 และฉันสงสัยว่าอะไรคือวิธีปฏิบัติที่ใช้กันทั่วไปมากที่สุดในการ "จัดการ" เฉดสี ฉันถามคำถามนี้เพราะในตัวอย่างที่ฉันพบ (เช่นที่รวมอยู่ในการสาธิต API ที่มาพร้อมกับ android sdk) ฉันมักจะเห็นทุกอย่างในชั้นเรียน GLRenderer และฉันค่อนข้างแยกสิ่งต่าง ๆ เพื่อที่ฉันจะได้ ตัวอย่างเช่นวัตถุ GLImage ที่ฉันสามารถนำกลับมาใช้ใหม่เมื่อใดก็ตามที่ฉันต้องการวาดรูปสี่เหลี่ยมพื้นผิว (ฉันกำลังมุ่งเน้นไปที่ 2D เท่านั้นในขณะนี้) เช่นเดียวกับที่ฉันมีในรหัส OpenGL ES 1.0 ของฉัน ในเกือบทุกตัวอย่างที่ฉันพบ shaders ถูกกำหนดให้เป็นคุณลักษณะของคลาส ตัวอย่างเช่น: public class Square { public final String vertexShader = "uniform mat4 uMVPMatrix;\n" + "attribute vec4 aPosition;\n" + …

2
GLSL Shader - เปลี่ยน Hue / Saturation / Brightness
ฉันพยายามเปลี่ยนเฉดสีของภาพโดยใช้ตัวแยกส่วน GLSL ฉันต้องการบรรลุสิ่งที่คล้ายกับเลเยอร์ Hue / Saturation Adjustment ของ Photoshop ในภาพต่อไปนี้คุณสามารถเห็นสิ่งที่ฉันได้รับจนถึง ฉันต้องการเปลี่ยนสีของสี่เหลี่ยมสีเขียวเพื่อให้ดูเหมือนว่าสี่เหลี่ยมสีแดงด้านขวา แต่ด้วย shader นี้ฉันได้ครึ่งสี่เหลี่ยมสีชมพูครึ่งสีแดง (สี่เหลี่ยมตรงกลาง) สิ่งที่ฉันทำในตัวแบ่งส่วนคือการแปลงสีของพื้นผิวเป็น HSV จากนั้นฉันเพิ่มสี HSV ที่ฉันได้รับจากจุดยอดสุดยอดไปยังมันและฉันแปลงสีกลับเป็น RGB ผมทำอะไรผิดหรือเปล่า? ชิ้นส่วน shader: precision mediump float; varying vec2 vTextureCoord; varying vec3 vHSV; uniform sampler2D sTexture; vec3 convertRGBtoHSV(vec3 rgbColor) { float r = rgbColor[0]; float g = rgbColor[1]; float b …

1
ควรแยกบัฟเฟอร์ออกไหม
ฉันทำการทดสอบกับ OpenGL ES 2 และได้รับคำถามโปรแกรมปัจจุบันของฉันเป็นเช่นนั้น: Init ------- -> create index buffer -> fill index buffer glBufferData … -> create vertex buffer -> fill vertex buffer glBufferData … Draw ------- 1. Apply vertex buffer -> Bind VAO -> bind vertex buffer - enable attributs (glVertexPointer, …) -> unbind vertex buffer -> …

4
การกำหนดรูปทรงเรขาคณิตใน OpenGL ES 2.0
ฉันวางแผนที่จะทำรูปทรงเรขาคณิตใน OpenGL ES 2.0 โดยทั่วไปฉันวางแผนที่จะแสดงรูปทรงเรขาคณิตเดียวกัน (เก้าอี้) อาจจะ 1,000 ครั้งในฉากของฉัน วิธีที่ดีที่สุดในการทำสิ่งนี้ใน OpenGL ES 2.0 คืออะไร? ฉันกำลังพิจารณาส่งโมเดลดู mat4 เป็นแอตทริบิวต์ เนื่องจากแอตทริบิวต์เป็นข้อมูลต่อยอดฉันต้องผ่าน mat4 เดียวกันนี้สามครั้งสำหรับแต่ละจุดยอดของรูปสามเหลี่ยมเดียวกัน (เนื่องจาก modelview ยังคงคงที่ข้ามจุดยอดของรูปสามเหลี่ยม) นั่นจะเป็นข้อมูลพิเศษจำนวนมากที่ส่งไปยัง GPU (2 จุดยอดพิเศษ * 16 ลอย * (จำนวนสามเหลี่ยม) จำนวนข้อมูลพิเศษ) หรือฉันควรจะส่ง mat4 เพียงครั้งเดียวต่อรูปสามเหลี่ยม แต่วิธีที่เป็นไปได้โดยใช้คุณลักษณะเนื่องจากแอตทริบิวต์ถูกกำหนดเป็นข้อมูล "ต่อยอด" วิธีที่ดีที่สุดและมีประสิทธิภาพในการทำอินสแตนซ์ใน OpenGL ES 2.0 คืออะไร

4
การตรวจจับการชนกันแบบ 2D
สมมติว่าฉันใช้ตัวละครนี้ (แหล่งที่มา: iconbug.com ) คุณจะใช้การตรวจจับการชนกันอย่างไร การใช้กล่องขอบไม่น่าจะเป็นการประมาณที่ดีเพราะรูปร่างของนกอยู่ใกล้กับสี่เหลี่ยม ฉันคิดว่าจะมีโครงสร้างข้อมูลแบบต้นไม้สี่คี่ภายในวัตถุที่แสดงถึงส่วนต่าง ๆ ของภาพ ใบแต่ละใบอาจเป็นได้ทั้งfalse(ในกรณีที่มันครอบคลุมพื้นที่สีขาว / โปร่งใสนอกนก) หรือtrue(ในกรณีที่มันหมายถึงพื้นที่ของนกเช่นจะงอยปากตา ฯลฯ ) จากนั้นก็ทดสอบสิ่งกีดขวางเพียงอย่างเดียวในที่เกิดเหตุเพื่อชนกับนก แต่ปัญหาของฉันในแนวทางของฉันคือ: ฉันไม่ทราบวิธีการเริ่มต้นต้นไม้รูปสี่เหลี่ยม เมื่อเริ่มต้นต้นไม้รูปสี่เหลี่ยมแล้วฉันไม่แน่ใจว่าจะสำรวจและใช้งานได้อย่างไรเมื่อมีสิ่งกีดขวางภายในพิกัดของภาพ คุณจะตรวจจับการชนกันของตัวละครที่ไม่ใช่รูปสี่เหลี่ยมได้อย่างไร? LE: อีกวิธีที่ฉันเห็นคือใช้กล่องที่มีขอบเขตหลายอัน ตัวอย่างเช่นฉันจะมีหนึ่งหรือสองกล่องที่ถูกผูกไว้สำหรับจะงอยปากแล้วบางส่วนของพวกเขาสำหรับผมหรือหาง แต่มันน่าเบื่อ หากนี่เป็นวิธีการที่ถูกต้องในกรณีของฉันฉันจะสร้างกล่องขอบเหล่านั้นได้อย่างไร ฉันสงสัยว่าฉันต้องให้พวกเขาฮาร์ดโค้ดในโปรแกรมของฉัน LE2: ฉันสนใจการชนที่แม่นยำพอสมควร ฉันไม่สามารถจินตนาการได้ว่ากล่องหรือวงกลมอย่างน้อยหนึ่งกล่องสามารถประมาณรูปร่างที่เหมาะสมได้อย่างไรดังนั้นวิธีการนี้จะไม่ทำงาน

3
ฉันจะงอวัตถุใน OpenGL ได้อย่างไร
มีวิธีหนึ่งที่สามารถโค้งงอวัตถุเช่นทรงกระบอกหรือระนาบโดยใช้ OpenGL ได้หรือไม่? ฉันเป็นผู้เริ่มต้น OpenGL (ฉันใช้ OpenGL ES 2.0 ถ้าเป็นเรื่องสำคัญแม้ว่าฉันจะสงสัยว่าคณิตศาสตร์มีความสำคัญที่สุดในกรณีนี้ดังนั้นจึงเป็นเวอร์ชั่นที่ไม่ขึ้นอยู่กับรุ่น) ฉันเข้าใจพื้นฐาน: แปลหมุนหมุนเมทริกซ์เป็นต้น ฉันสงสัยว่ามีเทคนิคที่ช่วยให้คุณเปลี่ยนรูปทรงเรขาคณิตของวัตถุของคุณ (ในกรณีนี้ด้วยการดัดงอ) หรือไม่? ยินดีต้อนรับลิงค์บทเรียนหรือการอ้างอิงอื่น ๆ !

1
ฉันจะนำ GPU มาสร้างสกินที่น่าเชื่อถือใน Android ได้อย่างไร?
ฉันพยายามทำให้ตัวละครน่าสนใจทำงานบน Android แนวคิดนี้ค่อนข้างวานิลลา: ฉันมีเมทริกซ์ที่น่าสนใจและด้วยจุดสุดยอดแต่ละอันฉันจะส่งดัชนีเมทริกซ์ได้ถึงสี่และน้ำหนักที่สอดคล้องกันสี่ประการ ฉันรวมพวกมันไว้ในส่วนยอดและนำไปใช้กับจุดสุดยอดแต่ละอัน นี่คือสิ่งที่ฉันกำลังทำในจุดสุดยอดในเกม iOS ของฉัน (ไม่ต้องสนใจมาตรฐาน): attribute vec4 in_pos; attribute vec4 in_normal; attribute vec2 in_texture_coords; attribute vec4 in_bone_index; attribute vec4 in_bone_weight; varying vec2 fs_texture_coords; uniform mat4 world_view_projection; uniform mat4 bones[@bind_matrix_count]; void main() { // Skinning vec4 transformed_pos = ((in_pos * bones[int(in_bone_index.x)]) * in_bone_weight.x) + ((in_pos * bones[int(in_bone_index.y)]) …

1
ใช้ประโยชน์จากการมัลติเธรดระหว่างเกมลูปและ openGL
การพูดคุยในบริบทของเกมโดยใช้ openGL renderer: สมมติว่ามีสองหัวข้อ: อัพเดทตรรกะของเกมและฟิสิกส์เป็นต้นสำหรับในเกมวัตถุ ทำให้ openGL ดึงสายสำหรับแต่ละวัตถุในเกมตามข้อมูลในวัตถุในเกม (เธรด 1 นั้นทำการปรับปรุงอยู่เสมอ) ยกเว้นว่าคุณมีสองสำเนาของวัตถุแต่ละเกมในสถานะปัจจุบันของเกมคุณจะต้องหยุดเธรด 1 ในขณะที่เธรด 2 ทำการเรียกการดึงมิฉะนั้นวัตถุในเกมจะได้รับการอัปเดตในช่วงกลางของการดึงการดึงสำหรับวัตถุนั้น ไม่พึงประสงค์! แต่การหยุดเธรด 1 เพื่อโทรออกอย่างปลอดภัยจากเธรด 2 ฆ่าวัตถุประสงค์ทั้งหมดของการทำงานหลายเธรด / การทำงานพร้อมกัน มีวิธีการที่ดีกว่านี้กว่าการใช้หลายร้อยหรือหลายพันหรือซิงค์วัตถุ / รั้วเพื่อให้สถาปัตยกรรมแบบมัลติคอร์สามารถใช้ประโยชน์จากประสิทธิภาพการทำงานหรือไม่ ฉันรู้ว่าฉันยังสามารถใช้มัลติเธรดสำหรับการโหลดพื้นผิวและการรวบรวมเฉดสีสำหรับวัตถุที่ยังไม่ได้เป็นส่วนหนึ่งของสถานะเกมปัจจุบัน แต่ฉันจะทำอย่างไรกับวัตถุที่ใช้งาน / มองเห็นได้โดยไม่ทำให้เกิดความขัดแย้งกับการดึงและอัปเดต จะเกิดอะไรขึ้นถ้าฉันใช้การล็อกการซิงค์แยกกันในแต่ละวัตถุของเกม วิธีนี้เธรดใด ๆ จะบล็อกเฉพาะวัตถุหนึ่งรายการ (กรณีที่เหมาะสมที่สุด) แทนที่จะเป็นทั้งรอบการอัพเดท / วาด แต่การล็อกแต่ละวัตถุมีค่าใช้จ่ายเท่าใด (เกมอาจมีวัตถุนับพันรายการ)

1
OpenGL ES สร้างเอฟเฟกต์ stencil โดยใช้พื้นผิว
สิ่งแวดล้อม นี่คือสภาพแวดล้อมที่ฉันกำลังทำงานอยู่: OpenGL ES 2.0 iPhone Simulator และ iPhone 4 iMac 27 "โดยใช้ NVIDIA GeForce GTX 680MX 2048 MB หวังว่าจะช่วย ปัญหา เคยค้นหาสูงและต่ำจากหลายแหล่งและหลายไซต์รวมถึง Stackoverflow แต่ยังไม่มีเอฟเฟกต์ stencil ที่ใช้งานได้ สิ่งที่ฉันมีคือ: สิ่งที่สีดำไม่ใช่รูปหลายเหลี่ยมแต่พื้นผิวถูกวาดลงบนสี่เหลี่ยมรูปสี่เหลี่ยมที่มีความกว้างและความสูงเท่ากับภาพพื้นหลัง ฉันกำลังพยายามทำเอฟเฟกต์ stencil ที่พื้นหลังและผู้ชายสีเหลืองตัวเล็ก ๆ ควรมองเห็นได้ถ้ามันอยู่ในพื้นผิวของสีดำ ในส่วนของฉันฉันมีสิ่งนี้: varying lowp vec4 destinationColor; varying lowp vec2 TexCoordOut; uniform sampler2D Texture; uniform highp float TexScale; void …

1
พื้นผิวของแผ่นสไปรต์ยกขอบของพื้นผิวที่อยู่ติดกัน
ฉันมีชุดสไปรต์แบบกำหนดเอง (openGL 2.0) ซึ่งใช้แผ่นงานสไปรต์ง่าย ๆ (พื้นผิวของฉันถูกจัดเรียงในแนวนอนติดกัน) ตัวอย่างเช่นนี่คือแผ่นทดสอบสไปรต์ที่มีพื้นผิวที่เรียบง่าย 2 แบบ: ตอนนี้สิ่งที่ฉันทำเมื่อสร้างวัตถุ openGL sprite ของฉันคือการระบุจำนวนเฟรมทั้งหมดในแอตลาสและเมื่อวาดให้ระบุเฟรมที่ฉันต้องการวาด จากนั้นจะหาตำแหน่งที่จะจับพื้นผิวจาก: การหารหมายเลขเฟรมที่ต้องการด้วยจำนวนเฟรมทั้งหมด (เพื่อรับค่าพิกัดซ้าย) จากนั้นทำการดำน้ำ 1 ตามจำนวนเฟรมทั้งหมดและเพิ่มผลลัพธ์ลงในพิกัดด้านซ้ายที่คำนวณข้างต้น ดูเหมือนว่าจะใช้งานได้ แต่บางครั้งฉันก็มีปัญหา พูดเช่นฉันต้องการวาด X ด้านล่างและฉันได้รับ ........... ฉันเคยได้ยินเกี่ยวกับการใส่ 'padding' ของ 1 px ระหว่างแต่ละพื้นผิว แต่บางคนสามารถอธิบายได้อย่างแม่นยำว่ามันทำงานอย่างไร ฉันหมายความว่าถ้าฉันทำสิ่งนี้มันจะสลัดการคำนวณออกไปเพื่อให้ได้พื้นผิว หากฉันรวมการซ้อนทับในพื้นผิวที่หยิบง่าย (ดังนั้นเทพดาจะถูกวาดด้วยเส้นขอบที่ว่างเปล่า) ดังนั้นถ้าเป็นเช่นนั้นจะทำให้เกิดปัญหากับการตรวจจับการชนกันหรือไม่ (เช่นสไปรต์อาจปรากฏขึ้นเพื่อชนกันเมื่อใช้กล่องที่มีขอบเขตเมื่อชิ้นส่วนโปร่งใสชนกัน) จะขอบคุณถ้ามีคนอธิบาย

3
ฉันจะส่งเมทริกซ์หลายตัวไปยังจุดสุดยอดได้อย่างไร
ฉันกำลังฝึกอนิเมชั่นโดยใช้กระดูก / สกินนิ่ง ฉันกำลังพยายามส่งเมทริกซ์หนึ่งส่วนต่อจุดยอด ฉันนึกถึงสองแนวทางนี้ วิธีที่ 1 ฉันมีมือจับอันเดียวสำหรับเมทริกซ์กระดูกแต่ละอันเช่นนี้ u_Bone0 = GLES20.glGetUniformLocation(mProgram, "u_Bone[0]"); u_Bone1 = GLES20.glGetUniformLocation(mProgram, "u_Bone[1]"); และในการที่onDrawฉันส่งแต่ละคนไปยัง shader: GLES20.glUniformMatrix4fv(u_Bone0, 1, false, matrix0, 0); เห็นได้ชัดว่านี่ไม่ใช่วิธีที่ดีถ้าฉันมีเมทริกซ์จำนวนมาก ความคิดที่สองของฉันที่ฉันยังไม่ได้ลองเนื่องจากมีโค้ดจำนวนมากสำหรับการปรับโครงสร้าง วิธีที่ 2 คือการใช้glUniformMatrix4fvเพื่อส่งพวกเขาทั้งหมดในครั้งเดียว (สมมติว่าฉันมี 20 เมทริกซ์) GLES20.glUniformMatrix4fv(u_Bones, 20, false, matrices, 0); ที่เป็นmatrices float[16 * 20]แต่จากนั้นการปรับเปลี่ยนเมทริกซ์สำหรับแต่ละกระดูกจะค่อนข้างน่าเบื่อ ตัวอย่างเช่นถ้าฉันต้องการหาเมทริกซ์ที่ 3 ฉันต้องการบางสิ่งตามแนวของ float[] _3rd = Arrays.copy(matrices, 3*16, 4*16); และการประหยัดกลับคืนค่าสามารถเป็นที่น่ารำคาญยิ่งขึ้น …

1
การเพิ่มประสิทธิภาพการทำงานของเครื่องแยกชิ้นส่วนหนัก
ฉันต้องการความช่วยเหลือในการเพิ่มประสิทธิภาพชุดของเฉดสีต่อไปนี้: เวอร์เท็กซ์: precision mediump float; uniform vec2 rubyTextureSize; attribute vec4 vPosition; attribute vec2 a_TexCoordinate; varying vec2 tc; void main() { gl_Position = vPosition; tc = a_TexCoordinate; } Fragment: precision mediump float; /* Uniforms - rubyTexture: texture sampler - rubyTextureSize: size of the texture before rendering */ uniform sampler2D rubyTexture; uniform …

1
gluLookAt ทำงานอย่างไร
จากความเข้าใจของฉัน gluLookAt( eye_x, eye_y, eye_z, center_x, center_y, center_z, up_x, up_y, up_z ); เทียบเท่ากับ: glRotatef(B, 0.0, 0.0, 1.0); glRotatef(A, wx, wy, wz); glTranslatef(-eye_x, -eye_y, -eye_z); แต่เมื่อฉันพิมพ์ModelViewเมทริกซ์การเรียกเพื่อglTranslatef()ดูเหมือนจะทำงานไม่ถูกต้อง นี่คือข้อมูลโค้ด: #include <stdlib.h> #include <stdio.h> #include <GL/glut.h> #include <iomanip> #include <iostream> #include <string> using namespace std; static const int Rx = 0; static const int …

4
ผลกระทบของลูปที่มีความยาวผันแปรได้ใน GPU shaders
เป็นที่นิยมในการแสดงเนื้อหาขั้นตอนภายใน GPU เช่นใน demoscene (วาดรูปสี่เหลี่ยมจัตุรัสเดียวเพื่อเติมหน้าจอและปล่อยให้ GPU คำนวณพิกเซล) เรย์เดินขบวนเป็นที่นิยม: ซึ่งหมายความว่า GPU กำลังประมวลผลวนซ้ำที่ไม่รู้จักจำนวนหนึ่งต่อพิกเซล (แม้ว่าคุณจะมีขอบด้านบนเหมือนmaxIterations) การวนลูปที่มีความยาวผันแปรมีผลต่อประสิทธิภาพของ shader อย่างไร ลองนึกภาพ psuedocode ray-marching ที่เรียบง่าย: t = 0.f; while(t < maxDist) { p = rayStart + rayDir * t; d = DistanceFunc(p); t += d; if(d < epsilon) { ... emit p return; } } ตระกูล …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.