ส่วนประกอบของ gl_TexCoord [0] หมายถึงอะไร?


10

อะไรคือความแตกต่างระหว่าง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ฉันต้องใช้มันหมายความว่าอะไรและที่ไหน?

คำตอบ:


15

ความแตกต่างเป็นเพียงความหมาย เวกเตอร์ใด ๆ GLSL สามารถเข้าถึงได้โดยใช้x/y/z/w, หรือr/g/b/a s/t/p/qการใช้งานทั่วไปคือ:

  • xyzwสำหรับพิกัดอวกาศ
  • rgbaสำหรับสี
  • stpqสำหรับพิกัดพื้นผิว
  • หากไม่มีการใช้ข้อใดข้อหนึ่งสามารถใช้รสชาติใดก็ได้ แต่เมื่อใดที่ทำให้สับสนvar[0]/var[1]/var[2]/var[3]อาจใช้แทนได้

คุณสามารถผสมพวกเขาในการแสดงออก: หรือแม้กระทั่งfoo.x = bar.q foo.xy = bar.gb + baz.st;ข้อ จำกัด ที่สำคัญคือการว่องไวสามารถทำได้โดยใช้ตัวอักษรของกลุ่มเดียวกันคือ foo.xyaเป็นที่ไม่ถูกต้องเพราะมันผสมxyจากxyzwและจากargba


ฉันไม่คุ้นเคยกับเครื่องหมายstpqสำหรับพิกัดพื้นผิว (เคยเห็นรังสียูวีแทนเสมอ) ฉันเดาว่าpจะใช้กับพื้นผิว 3 มิติ แต่ในสถานการณ์ใดจะใช้q แก้ไข: ไม่เป็นไรฉันเพิ่งพบคำตอบของฉัน นั่นคือด้วย TextureCubeArrays
David Gouveia

@DavidGouveia: ไม่จริง แตกต่างกันฟังก์ชั่นพื้นผิวที่มีความหมายที่แตกต่างกัน ตัวอย่างเช่นการเข้าถึงsampler2DShadowด้วยtextureหมายความว่าพิกัดpคือค่าการเปรียบเทียบ การเข้าถึง a sampler2DShadowด้วยtextureProjหมายความว่าพิกัดpคือค่าการเปรียบเทียบและพิกัดqแบ่งออกเป็นสามส่วนอื่น ( ก่อนการเปรียบเทียบดังนั้นpจึงเป็นจริงcomparison * q) พวกเขาไม่มีความหมายที่แท้จริง ความหมายเปลี่ยนแปลงขึ้นอยู่กับวิธีการใช้งาน
Nicol Bolas

@ Nicol ขอบคุณสำหรับการล้างที่ขึ้น ฉันเคยใช้ HLSL มาก่อนและถึงแม้จะมีความจำเป็นพื้นฐาน tex2D และ texCube พื้นฐานเท่านั้น ฉันไม่รู้ถึงฟังก์ชั่นการทำพื้นผิวที่มีอยู่มากมาย (ไม่เกี่ยวข้อง: นั่นคือชื่อจริงของคุณหรือแค่มังกรจาก MTG?)
David Gouveia
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.