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

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

1
วิธีการคำนวณเวกเตอร์แทนเจนต์และบิทูเมน
ฉันมีพื้นผิวโหลดใน three.js จากนั้นส่งผ่านไปยังเฉดสี ใน shader ที่ฉันคำนวณปกติ, และฉันบันทึกลงในตัวแปรเวกเตอร์ยูวี <script id="vertexShader" type="x-shader/x-vertex"> varying vec3 N,P; varying vec2 UV; void main() { gl_Position= projectionMatrix * modelViewMatrix * vec4(position,1.0); P= position; N= normalMatrix * vec3(normal); UV= uv; } </script> <script id="fragmentShader" type="x-shader/x-fragment"> varying vec3 N,P; varying vec2 UV; uniform sampler2D texture; void main() { …

2
ฉันจะสร้างประกายแวววาวได้อย่างไร?
ฉันพยายามสร้างเอฟเฟกต์ระยิบระยับสำหรับ shader เรียลไทม์ของฉัน แต่ฉันไม่รู้ว่าจะทำอย่างไร นี่คือตัวอย่างหนึ่งและอีกตัวอย่างหนึ่ง ฉันสามารถใช้เทคนิคใดในการทำสิ่งนี้

2
ใช้สองเฉดสีแทนหนึ่งด้วยคำสั่ง IF
ฉันทำงานเกี่ยวกับการโอนย้ายแหล่ง OpenGL ของ ES 1.1 ที่ค่อนข้างใหญ่ไปเป็น ES 2.0 ใน OpenGL ES 2.0 (ซึ่งหมายความว่าทุกอย่างใช้ shaders) ฉันต้องการวาดกาน้ำชาสามครั้ง คนแรกที่มีสีสม่ำเสมอ (AlCa เก่า glColor4f) ตัวที่สองด้วยสีต่อจุดสุดยอด (กาน้ำชามีสีของจุดสุดยอดเช่นกัน) อันที่สามที่มีพื้นผิวต่อยอด และอาจเป็นอันที่สี่ที่มีทั้งพื้นผิวและสีต่อจุด แล้วก็อาจจะเป็นอันดับที่ 5 ที่มีบรรทัดฐานเช่นกัน .. มีสองทางเลือกที่ฉันมีกับการนำไปปฏิบัติเท่าที่ฉันรู้ สิ่งแรกคือสร้าง shader ที่รองรับทั้งหมดข้างต้นด้วยชุดที่กำหนดให้เปลี่ยนพฤติกรรม (เช่นใช้ชุดสีเอกพจน์หรือชุดสีต่อจุดสุดยอด) ตัวเลือกที่สองคือการสร้าง shader ที่แตกต่างกันสำหรับแต่ละสถานการณ์ ด้วยการประมวลผลล่วงหน้าของ Shader ที่กำหนดเองมันไม่ซับซ้อนที่ต้องทำ แต่สิ่งที่น่ากังวลคือค่าใช้จ่ายด้านประสิทธิภาพในการสลับเฉดสีระหว่างวัตถุรูปวาด ฉันอ่านมาแล้วว่ามันไม่เล็กเลย ฉันหมายความว่าวิธีที่ดีที่สุดในการทำสิ่งนี้คือการสร้างทั้งสองอย่างและวัดผล แต่ก็เป็นการดีที่จะได้ยินอินพุตใด ๆ
9 opengl-es  glsl 

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 …

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; } } ตระกูล …

3
ปัญหาการแมปเงาครั้งแรก
ฉันใช้การทำแผนที่เงาพื้นฐานเป็นครั้งแรกใน OpenGL โดยใช้ shaders และฉันประสบปัญหาบางอย่าง ด้านล่างคุณสามารถดูตัวอย่างของฉากที่แสดงผลของฉัน: กระบวนการของการแมปเงาที่ฉันกำลังติดตามคือฉันแสดงฉากให้กับ framebuffer โดยใช้ View Matrix จากมุมมองแสงและเมทริกซ์การฉายและแบบจำลองที่ใช้สำหรับการเรนเดอร์ปกติ ในรอบที่สองฉันส่งเมทริกซ์ MVP ด้านบนจากมุมมองแสงไปยังตัวแบ่งจุดยอดซึ่งเปลี่ยนตำแหน่งเป็นพื้นที่แสง ส่วนของ shader จะแบ่งมุมมองและเปลี่ยนตำแหน่งเป็นพิกัดพื้นผิว นี่คือจุดสุดยอดของฉัน #version 150 core uniform mat4 ModelViewMatrix; uniform mat3 NormalMatrix; uniform mat4 MVPMatrix; uniform mat4 lightMVP; uniform float scale; in vec3 in_Position; in vec3 in_Normal; in vec2 in_TexCoord; smooth out vec3 pass_Normal; …

3
การแรเงาที่เลื่อนออกไป - วิธีรวมแสงหลายดวงเข้าด้วยกัน?
ฉันเริ่มต้นด้วย GLSL และฉันได้ใช้การแรเงาที่เลื่อนออกไปอย่างง่ายซึ่งจะส่งออก G-buffer ด้วยตำแหน่ง, ค่าพื้นฐานและอัลเบโด้ ฉันยังเขียน shader แสงจุดง่ายเช่นกัน ตอนนี้ฉันวาดทรงกลมสำหรับจุดไฟและเอาท์พุทไปที่บัฟเฟอร์แสง ปัญหาคือฉันจะรวมผลลัพธ์ของบัฟเฟอร์แสงเมื่อวาดแสงหลายดวงได้อย่างไร เช่นเมื่อฉันวาดแสงที่สองไปยัง lightbuffer โดยใช้ shader แสงจุดฉันจะเพิ่มแสงแรกในแสงที่สองในบัฟเฟอร์แสงได้อย่างไร ฉันหมายความว่าคุณไม่สามารถอ่านและเขียนไปยังบัฟเฟอร์เอาต์พุตเดียวกันได้หรือไม่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.