คำถามติดแท็ก glsl

ภาษาการเขียนโปรแกรมสำหรับ OpenGL shaders

2
การแรเงาแบบเรียงต่อกันของกระเบื้องการคำนวณ frusta ของกระเบื้องใน OpenGL
ฉันพยายามแรเงาแบบเรียงต่อกันบนกระเบื้องใน OpenGL โดยใช้ตัวประมวลผล แต่ฉันได้รับอุปสรรคเมื่อพยายามสร้าง frustum สำหรับแต่ละไทล์ ฉันใช้การสาธิตฟอร์เวิร์ด + ของ AMD (เขียนใน D3D) เป็นแนวทาง แต่ดูเหมือนว่าไฟจะถูกกำจัดเมื่อพวกเขาไม่ควร UPDATE อ่านด้านล่างสำหรับการปรับปรุง นี่คือ shader การคำนวณของฉัน (สมบูรณ์): #version 430 core #define MAX_LIGHTS 1024 #define MAX_LIGHTS_PER_TILE 40 #define WORK_GROUP_SIZE 16 struct PointLight { vec3 position; float radius; vec3 color; float intensity; }; layout (binding = 0, rgba32f) uniform …

1
ทฤษฎีสัมพัทธภาพพิเศษใน GLSL
ฉันพยายามใช้ GLSL shader ซึ่งช่วยทำความเข้าใจสัมพัทธภาพพิเศษ Lorentz Transformation ลองมาสองแกนชิดสังเกตการณ์เฉื่อย และO O'ผู้สังเกตการณ์O'อยู่ในการเคลื่อนไหวสังเกตการณ์ WRT ด้วยความเร็วOv=(v_x,0,0) เมื่ออธิบายในแง่ของO'พิกัดเหตุการณ์P' = (x',y',z',ct')จะเปลี่ยนพิกัด(x,y,z,ct)= L (x',y',z',ct') โดยที่ L เป็นเมทริกซ์ 4x4 ที่เรียกว่าการแปลงแบบลอเรนซ์ซึ่งช่วยให้เราเขียนพิกัดของเหตุการณ์ P 'ในOพิกัด (สำหรับรายละเอียดดูhttp://en.wikipedia.org/wiki/Lorentz_transformation#Boost_in_the_x-direction ) ฉันได้เขียน Shader Vertex เบื้องต้นตัวแรกที่ใช้การแปลงแบบลอเรนซ์ที่กำหนดความเร็วให้กับทุกจุดสุดยอด แต่ฉันไม่สามารถทำให้การแปลงทำงานได้อย่างถูกต้อง vec3 beta= vec3(0.5,0.0,0.0); float b2 = (beta.x*beta.x + beta.y*beta.y + beta.z*beta.z )+1E-12; float g=1.0/(sqrt(abs(1.0-b2))+1E-12); // Lorentz factor (boost) float q=(g-1.0)/b2; …

3
ใช้ OpenGL หรือ GLSL ล้วนๆ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นไปตามหัวข้อสำหรับ Game Exchange Stack Exchange ปิดให้บริการใน6 ปีที่ผ่านมา ฉันสนใจที่จะศึกษาการเขียนโปรแกรมกราฟิกจุดเริ่มต้นที่ชัดเจนคือการเรียนรู้ OpenGL แต่การรวบรวมข้อมูลที่กระจัดกระจายรอบ ๆ ฟอรัมและไซต์ดูเหมือนว่าการใช้งาน OpenGL อย่างแท้จริงนั้นจะจางหายไปเนื่องจากสิ่งต่าง ๆ ส่วนใหญ่ pre-3.0 กำลังถูกคัดค้านและอ้างถึงการทบทวนใน Amazon นอกจากนี้หนังสือที่ฉันได้เห็นดูเหมือนว่ายอดเยี่ยมครอบคลุมรุ่นใหม่ แต่เพียงบางส่วนเพราะส่วนที่ดีของหนังสือสอนฟังก์ชั่นที่เลิกใช้แล้วและมีหนังสือเฉพาะสำหรับ GLSL นี่คือที่ฉันพบปัญหาแรกของฉันฮาร์ดไดรฟ์บางตัวไม่รองรับ GLSL รวมถึงโน้ตบุ๊กที่มี Intel รวมกราฟิกที่ฉันวางแผนไว้ว่าจะใช้ ฟังก์ชั่น GLuint vertShader = glCreateShader(GL_VERTEX_SHADER); ทำให้เกิดความผิดพลาดในการแบ่งส่วนและจากรูปลักษณ์ของมันไดรเวอร์ของฉันไม่รองรับเฉดสี ดังนั้นคำถามของฉันคือความเป็นไปได้ในการสร้างเกมเฉพาะใน OpenGL คืออะไร ฉันจะหายไปคุณสมบัติที่ดีที่ไม่สามารถถูกแทนที่ได้จากภาษา Shader หรือไม่? และฮาร์ดแวร์ประเภทใด (ฉันหวังว่าจะได้ใช้เกมกับ shaders อย่างถูกต้อง?
11 opengl  glsl 

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)]) …

2
Ray Marching นำไปใช้กับโลกที่มีชีวิตชีวาได้อย่างไร
ฉันคิดว่าฉันเข้าใจพื้นฐานของสนามเรย์มาร์ช คุณจำลองฉากของคุณด้วยฟิลด์ระยะไกล (เช่น: http://iquilezles.org/www/articles/distfunctions/distfunctions.htm ) จากนั้นสำหรับแต่ละพิกเซลที่คุณฉายรังสีให้เริ่มจากจุดเริ่มต้นของรังสี ค้นหาระยะทางไปยังวัตถุที่ใกล้ที่สุดที่จุดนั้นและเพิ่มจุดตามระยะทางที่ใกล้ที่สุดจนกว่าคุณจะตีอะไร ฉันจัดการที่จะทำ renderer ง่ายและนั่นคือที่ที่คำอธิบายส่วนใหญ่ของเทคนิคหยุด นี่ทำให้ฉันมีคำถามบางอย่างเกี่ยวกับวิธีการใช้ SDF Ray Marching ในสถานการณ์จริง: คำถามที่ 1: ในเกมจริงฉากมักจะซับซ้อนและโหลดบน CPU โดยมีวัตถุแบบไดนามิกมากมาย ฉันเข้าใจการบดเคี้ยวแบบพื้นฐาน (เช่น octrees) และด้วยการเรนเดอร์รูปหลายเหลี่ยมฉันจะสร้างรายการ (บน CPU) ของรายการในมุมมอง frustrum เพื่อเรนเดอร์ ดังนั้นจินตนาการว่าฉันมีฉากที่ซับซ้อนมากซึ่งมีตัวละครและวัตถุแบบไดนามิกเคลื่อนไปมาบนหน้าจอควบคุมโดยซีพียู ฉันจะสตรีมวัตถุที่ฉันต้องการให้แสดงกับ GPU ในแต่ละเฟรมได้อย่างไร ทุกตัวอย่างมีฉากฮาร์ดโค้ดใน GLSL บางคนสามารถแบ่งปันตัวอย่างของระดับที่ถูกส่งไปยัง shader แบบไดนามิกได้หรือไม่? คำถามที่ 2: วัตถุมีหลายสีได้อย่างไร ฟังก์ชั่นระยะทางเพียงแค่คืนค่าระยะทาง แต่การใช้งานทั่วไปส่งสีกลับมาได้อย่างไร (เช่นคุณกดทรงกลมสีแดงและไม่ใช่บลูคิวบ์) หากนี่เป็นการใช้งานซีพียูฉันสามารถเรียกใช้ฟังก์ชันสากลภายในฟังก์ชันระยะทางเมื่อมีการตีเพื่อยุติเรย์มาร์เชอร์ เนื้อ / สี แต่คุณจะส่งคืนสีหรือพื้นผิวของรายการใน GLSL …

2
เลนส์แก้วหักเหแสง
ฉันมีพื้นหกเหลี่ยมไม่สิ้นสุดสร้างโดย tessellating จุดตารางในคู่ shader tessellation: โปรดทราบว่านี่เป็นโครงลวดแบบเรียบ - "เงา" เป็นเคล็ดลับแสง: ตอนนี้ฉันต้องการทำให้แก้วนี้ดูหนาและหักเหได้ แต่ไม่แน่ใจว่าจะดำเนินการต่อไปได้อย่างไร สิ่งแรกที่อยู่ในใจคือ ตั้งค่าชุดที่ประกอบด้วย "ความหนา" ที่ร้องขอของบล็อก เมื่อคำนวณแสงให้ใช้กฎของสเนลล์เพื่อคำนวณความยาวเส้นทางแสงที่รังสีจะผ่านบล็อกเลขฐานสิบหกหากจริง ๆ แล้วมันมีความหนาเท่ากับชุด "ความหนา" กล่าวและรวมอัลฟากับความยาวนั้น ที่จะให้ความโปร่งใส แต่ไม่ได้จัดการกับสิ่งต่าง ๆ เช่นการสะท้อนภายใน / TIR ฯลฯ ฉันยังไม่ได้ลองเลยดังนั้นฉันจึงไม่แน่ใจว่าผลลัพธ์ภาพจะเป็นอย่างไร ในที่สุดสำหรับระดับนี้ฉันพยายามทำให้แก้วนั้นมีลักษณะเป็นพื้นหกเหลี่ยมที่ใช้ใน Tron: Legacy ระหว่างการต่อสู้แผ่นดิสก์ ( ดูภาพนี้เป็นตัวอย่าง ) ข้อเสนอแนะ?
10 shaders  glsl 

2
เรียงลำดับวัตถุก่อนเรนเดอร์
ฉันพยายามที่จะใช้กราฟฉากและในบทความทั้งหมดที่ฉันเจอมีการพูดคุยเกี่ยวกับการเรียงลำดับวัตถุ ดังนั้นคุณจะต้องจัดเรียงวัตถุของคุณตาม "วัสดุ" ตัวอย่างเช่น ตอนนี้จนกระทั่งฉันนั่งลงและเริ่มนำมันมาใช้ฉันทำแบบนี้เพื่อรับอนุญาตเพราะมันสมเหตุสมผล แต่ตอนนี้ฉันสงสัยว่าการเรียงลำดับจะเปลี่ยนไปอย่างไร ในเครื่องมือของฉันฉันมีผู้จัดการสำหรับ UBOs ฉันใช้ข้อมูลเหล่านั้นเพื่อจัดเก็บข้อมูลที่จะแชร์ระหว่างโปรแกรมในขณะนี้ที่เกี่ยวข้องกับเวลาเท่านั้นกล้องและการฉายภาพการฝึกอบรมและไฟ (ฉันไม่ต้องกังวลกับการจัดการไฟที่ส่งผลกระทบต่อ) วัตถุใดที่เอทีเอ็ม) ตอนนี้สำหรับแต่ละรุ่นฉันต้องเปลี่ยนแบบจำลองเป็นชุดเมทริกซ์ของโลกการเรียงลำดับจะไม่เปลี่ยนแปลง ดังนั้นการกระโดดจากการเปลี่ยนเมทริกซ์นี้เป็นการตั้งค่าวัสดุสำหรับแต่ละวัตถุที่ไม่ดี? ฉันจำไม่ได้ว่าอ่านที่ไหนสักแห่งว่าทุกครั้งที่คุณเปลี่ยนบางสิ่งในท่อมันต้องล้างออกและอาจทำให้เกิดปัญหาด้านประสิทธิภาพ แต่สำหรับการวาดภาพแต่ละครั้งฉันกำลังตั้งค่าแบบจำลองให้กับเมทริกซ์ของโลกอยู่ดีดังนั้นมันจะทำให้รู้สึกกังวลเกี่ยวกับเรื่องนี้อย่างไร BTW มีข้อมูลใด ๆ เกี่ยวกับการเปลี่ยนเครื่องแบบและการเรียก glBufferSubData แพงกว่า (หรือน้อยกว่า)



1
ส่วนประกอบของ gl_TexCoord [0] หมายถึงอะไร?
อะไรคือความแตกต่างระหว่างgl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pและgl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].z? ฉันเข้าใจว่าgl_TexCoord[0].x, gl_TexCoord[0].y gl_TexCoord[0].zพิกัดพิกเซลเป็นอย่างไร แต่gl_TexCoord[0].s, gl_TexCoord[0].t gl_TexCoord[0].pฉันต้องใช้มันหมายความว่าอะไรและที่ไหน?

6
OpenGL ES 2.0: Repository ของ Quality Shaders [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันขอถามได้ไหมว่าจะแนะนำที่เก็บข้อมูลของจุดยอด OpenGL (OpenGL ES 2.0) ที่มีคุณภาพสูงและชิ้นส่วนที่แตกออกเป็นชิ้นๆ ได้ไหม ฉันกำลังมองหาพิกเซลเชดเดอร์ ligting (เช่นพงษ์ ) และ simmilar มันจะเป็นการดีที่ได้เห็นพวกเขามากขึ้นเพื่อให้สามารถเลือกระหว่างคุณภาพเทียบกับประสิทธิภาพของ shader

2
วิธีที่ดีที่สุดในการอัปเดตเครื่องแบบ shader คืออะไร?
อะไรคือวิธีที่ได้รับการยอมรับมากที่สุดในการรักษาเมทริกซ์ของ shader ให้ทันสมัยและทำไม? ตัวอย่างเช่นในตอนนี้ฉันมีShaderชั้นเรียนที่จัดเก็บด้ามจับไปยังโปรแกรมและชุดเครื่องแบบ GLSL ทุกครั้งที่ฉันขยับกล้องฉันจะต้องผ่านเมทริกซ์มุมมองใหม่ไปยัง shader จากนั้นวัตถุทุกอย่างในโลกที่แตกต่างกันฉันจะต้องผ่านเมทริกซ์โมเดลไปยัง shader สิ่งนี้ จำกัด ฉันอย่างรุนแรงเนื่องจากฉันไม่สามารถทำอะไรได้หากไม่สามารถเข้าถึงวัตถุ shader นั้นได้ ฉันคิดว่าจะสร้างShaderManagerชั้นเรียนเดี่ยวที่รับผิดชอบการถือร่มเงาที่ใช้งานอยู่ทั้งหมด จากนั้นฉันก็สามารถเข้าถึงสิ่งนั้นได้จากทุกที่และวัตถุในโลกไม่จำเป็นต้องรู้เกี่ยวกับสิ่งที่ shaders กำลังใช้งานอยู่เพียงเพื่อให้พวกเขาShaderManagerรู้เมทริกซ์ที่ต้องการ แต่ฉันไม่แน่ใจว่านี่เป็นวิธีที่ดีที่สุดและอาจมีปัญหาบางอย่าง จะเกิดขึ้นจากการใช้วิธีการนี้
10 opengl  shaders  glsl 

1
วิธีการเปลี่ยนสีของพิกเซลพื้นหลัง
ฉันกำลังเขียนเกมและแก้ไขแผนที่โดยใช้ Java และ jMonkeyEngine ในเครื่องมือแก้ไขแผนที่ฉันมีแปรงทำโดย wireframed sphere ปัญหาของฉันคือ: ฉันต้องการให้มันปรากฏทุกที่ดังนั้นฉันต้องการกลับสีของพิกเซล "หลัง" แปรงนี้ ฉันอยากจะทำมันด้วย fragment shader (GLSL) แต่ฉันไม่รู้วิธีรับสีของพิกเซลนี้

1
ฉันจะสร้างการไหลของน้ำแบบเรียงบนลงล่าง 2 มิติได้อย่างไร?
ฉันกำลังทำงานในเกม 2D ที่เป็นภาพกราฟิกบนพื้นฐานที่ได้รับแรงบันดาลใจจากป้อมปราการ Dwarf ฉันอยู่ในจุดที่ใช้แม่น้ำในโลกของเกมซึ่งครอบคลุมจำนวนแผ่นและฉันได้คำนวณทิศทางการไหลสำหรับแต่ละไทล์ดังที่แสดงด้านล่างโดยเส้นสีแดงในแต่ละไทล์ สำหรับการอ้างอิงถึงสไตล์กราฟิกนี่คือลักษณะของเกมของฉันในขณะนี้: สิ่งที่ฉันต้องการคือเทคนิคบางอย่างในการเคลื่อนไหวของน้ำที่ไหลในแผ่นกระเบื้องของแม่น้ำแต่ละสายเพื่อให้การไหลของมันกลมกลืนไปกับแผ่นกระเบื้องโดยรอบ ตัวอย่างที่ใกล้เคียงที่สุดที่ฉันได้พบกับสิ่งที่ผมอธิบายไว้หลังจากที่http://www.rug.nl/society-business/centre-for-information-technology/research/hpcv/publications/watershader/แต่ฉันไม่ได้ค่อนข้าง เมื่อถึงจุดที่สามารถเข้าใจว่าเกิดอะไรขึ้น ฉันมีความเข้าใจเพียงพอเกี่ยวกับการเขียนโปรแกรม shader ที่จะใช้แสงแบบไดนามิกของตัวเอง แต่ฉันไม่สามารถเข้าใจวิธีการที่นำมาใช้ในบทความที่เชื่อมโยงได้ ใครช่วยอธิบายถึงผลข้างต้นที่เกิดขึ้นหรือแนะนำวิธีการอื่นเพื่อให้ได้ผลลัพธ์ที่ฉันต้องการ ฉันคิดว่าส่วนหนึ่งของวิธีแก้ปัญหาข้างต้นซ้อนทับกระเบื้อง (แม้ว่าฉันไม่แน่ใจว่าจะใช้ชุดค่าผสมใด) และหมุนแผนที่ปกติที่ใช้สำหรับการบิดเบือน (อีกครั้งไม่มีแนวคิดเฉพาะเจาะจง) และในอดีตว่าฉันหายไปเล็กน้อยขอบคุณ ความช่วยเหลือใด ๆ !

5
ทำไมฉันไม่สามารถใช้โอเปอเรเตอร์ '> =' กับ Vector3s ได้
ฉันพยายามที่จะได้รับรูปสี่เหลี่ยมผืนผ้าย้ายไปมาระหว่างสองตำแหน่งที่ผมพูดถึงและ_positionA ทั้งสองประเภท_positionB Vector3สี่เหลี่ยมผืนผ้าเคลื่อนไหวได้ดี อย่างไรก็ตามเมื่อมันมาถึง_positionBมันจะไม่เคลื่อนที่ในทิศทางตรงกันข้ามเหมือนอย่างที่ควร ฉันกลับไปที่โค้ดเพื่อดู ฉันมาถึงข้อสรุปว่าเป็นวัตถุย้ายที่ifงบในรหัสพลาดเฟรมซึ่งในตำแหน่ง rects _positionBเท่ากับ ฉันตัดสินใจที่จะปรับเปลี่ยนรหัสไปในทิศทางที่ตรงกันข้ามถ้าตำแหน่ง rects คือมากกว่าหรือเท่ากับ _positionBรหัสของฉันไม่ยาวเกินไปดังนั้นฉันจะแสดงด้านล่าง: using UnityEngine; using System.Collections; public class Rectangle : MonoBehaviour { private Vector3 _positionA = new Vector3(-0.97f, -4.28f); //Start position private Vector3 _positionB = new Vector3(11.87f, -4.28f); //End position private Transform _rect_tfm; private bool _atPosA = false, _atPosB = …
9 unity  c#  vector  mathematics  vector  matrix  unity  c#  transformation  java  3d  terrain-rendering  shading  ios  opengl-es  opengl  rendering  optimization  python  scripting  minecraft-modding  modding  pc  3d-meshes  mesh  culling  point-cloud  networking  interpolation  mathematics  game-design  ai  game-mechanics  animation  unreal-4  skeletal-animation  3dsmax  unity  c#  3d  opengl  c++  textures  unity  ide  cocos2d  cocos2d-x-js  unity  c#  mono  il2cpp  c++  game-loop  timer  linux  flash  actionscript-3  java  glsl  c++  vector  entity-component  c++  directx11  windows  visual-studio  libgdx  mouse  unity  c#  architecture  storage  unity  c#  rotation  coordinates  quaternion  vrpn  movement  vector  unreal-4  unity  shaders  unity  gui  text  bug  shooter  3d  animation  rendering  voxels  c++  mmo  multithreading  linux  textures  procedural-generation  terrain-rendering  multiplayer  mmo  game-state  java  android  libgdx  opengl  procedural-generation  unity  gui  3d  animation  tools  geometry-shader  mobile  advertisements  unity  c#  animation  scripting  unity  animation  unityscript  coroutines  unity  shaders  lighting  camera 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.