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

OpenGL เป็นมาตรฐานกราฟิกและ API ซึ่งกำหนดเป้าหมายไปยังตลาดเดสก์ท็อปและเวิร์กสเตชัน มันถูกออกแบบมาให้ง่ายต่อการเร่งความเร็วด้วยฮาร์ดแวร์คอมพิวเตอร์เฉพาะและการใช้งานส่วนใหญ่จึงให้ประสิทธิภาพที่ดีขึ้นอย่างมากเมื่อเทียบกับการแสดงผลซอฟต์แวร์แบบดั้งเดิม ปัจจุบัน OpenGL ใช้สำหรับแอพพลิเคชั่นเช่นซอฟต์แวร์ CAD และเกมคอมพิวเตอร์ นอกจากนี้ยังเป็นแพลตฟอร์มข้าม มาตรฐาน OpenGL ควบคุมโดยกลุ่ม Khronos ซึ่งควบคุม OpenGL ES ด้วย

6
วัตถุประสงค์ของปริมาณการดูเป็นที่ยอมรับคืออะไร?
ฉันกำลังเรียนรู้ OpenGL และไม่สามารถหาคำตอบสำหรับคำถามนี้ได้ หลังจากเมทริกซ์การฉายภาพถูกนำไปใช้กับพื้นที่มุมมองพื้นที่การดูเป็น "ปกติ" เพื่อให้จุดทั้งหมดอยู่ในช่วง [-1, 1] โดยทั่วไปจะเรียกว่า "ปริมาณมุมมองมาตรฐาน" หรือ "พิกัดอุปกรณ์ปกติ" ในขณะที่ฉันได้พบแหล่งข้อมูลมากมายที่บอกฉันเกี่ยวกับสิ่งที่เกิดขึ้นฉันไม่เห็นอะไรเลยว่าทำไมมันถึงเกิดขึ้น จุดประสงค์ของขั้นตอนนี้คืออะไร?

1
ฉันจะบอกได้ว่าฉันใช้หน่วยความจำการ์ดหน่วยความจำเท่าใด
ฉันต้องการกำหนดโปรแกรมโดยทางรันไทม์ว่าโปรแกรมของฉันใช้หน่วยความจำการ์ดหน่วยความจำเท่าใด โดยเฉพาะฉันสงสัยเกี่ยวกับวิธีการทำบนเครื่อง Windows ที่ใช้ OpenGL แต่ฉันสนใจวิธีที่จะทำได้บนแพลตฟอร์มอื่นเช่นกัน ฉันรู้ว่ามียูทิลิตี้ออกมีที่จะแสดงให้ฉันใช้หน่วยความจำในขณะที่โปรแกรมของฉันทำงาน แต่ฉันต้องการที่จะสามารถค้นหาข้อมูลจากรหัสของฉัน
15 opengl  c++  windows  c 

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

1
การสุ่มตัวอย่างหลายครั้งมีประโยชน์หรือไม่
ดังนั้นฉันจึงเจอเว็บไซต์นี้และคุณสามารถเห็นบรรทัดเหล่านี้ในวรรคแรกและสอง: สำหรับเอฟเฟกต์ที่หยาบ แต่ง่ายให้วาดส่วนที่สว่างของฉาก (เช่นแหล่งกำเนิดแสง) ลงใน FBO จากนั้น ตัวอย่างด้วย GL_LINEAR minification หลาย ๆ ครั้งหลายต่อหลายครั้ง สำหรับการเรนเดอร์ขั้นสุดท้ายเพียงแค่รวมฉากดั้งเดิมเข้ากับ FBO ที่ลดขนาดลง ในตัวอย่างต่อไปฉากเดิมคือ 128 x 128 และdownsampled 3 ครั้ง สิ่งนี้ต้องมีวัตถุเฟรม 4 ตัวตัว ฉากดั้งเดิมจะแสดงที่มุมบนซ้ายและการเรนเดอร์สุดท้ายที่มุมขวาบน มีเหตุผลใดบ้างที่ฉันควรจะลดตัวอย่างหลาย ๆ ครั้ง (128 -> 64 -> 32 -> 16) แทนที่จะเป็นตัวอย่างหนึ่งครั้ง (128 -> 16) หากคุณเลื่อนลงมามากขึ้นพวกเขาจะลดลงอย่างเช่น 9 ครั้ง (128 -> ... -> 16 -> …
14 opengl  graphics  bloom 

2
บัฟเฟอร์เวอร์เท็กซ์ขนาดใหญ่เทียบกับการดึงสายหลายครั้ง
ฉันเพิ่งเริ่มใช้งาน OpenGL และฉันพยายามจะใช้มันเพื่อสร้างเกม 2D ในเกมนี้ฉันมีตารางหกเหลี่ยมที่ประกอบไปด้วยรูปหกเหลี่ยมสีที่แตกต่างกันมาก ในฐานะโปรแกรมเมอร์มือใหม่ OpenGL ฉันเห็นวิธีวาดตารางนี้สองวิธี: การใช้จุดสุดยอดบัฟเฟอร์กับข้อมูลสำหรับรูปหกเหลี่ยมเดียวจากนั้นใช้ค่าออฟเซ็ตสม่ำเสมอและวนซ้ำบน CPU เพื่อวาดโปรแกรมเดียวกันหลาย ๆ ครั้งจนกว่าฉันจะมีกริด การสร้างบัฟเฟอร์จุดสุดยอดที่มีการคำนวณล่วงหน้าขนาดใหญ่มากซึ่งดึงรูปหกเหลี่ยมทั้งหมดในการโทรครั้งเดียว วิธีใดมีประสิทธิภาพมากที่สุด มีวิธีที่ดีกว่าในการทำเช่นนี้?
14 opengl  shaders 

1
การนำ skybox ไปใช้กับ GLSL เวอร์ชัน 330
ฉันกำลังพยายามให้สกายบ็อกซ์ทำงานกับ OpenGL 3.3 และ GLSL เวอร์ชัน 330 ฉันไม่สามารถค้นหาการสอน OGL skybox ที่ทันสมัยได้อย่างสมบูรณ์ที่ใดก็ได้บนเว็บดังนั้นฉันจึงทำให้รุ่นเก่า (ใช้glVertexAttribPointer()แทนgl_Vertexจุดยอดเป็นต้น) ส่วนใหญ่ใช้งานได้ แต่สำหรับ 2 รายละเอียดหลัก กล่องสกายนั้นเหมือนรูปสามเหลี่ยมบนท้องฟ้าและพื้นผิวนั้นบิดงอไม่ดีและยืดออก (มันควรจะเป็นทุ่งหญ้าดาวฉันได้รับขณะที่เส้นบนพื้นหลังสีดำ) ฉันแน่ใจ 99% ว่านี่เป็นเพราะฉันไม่ได้ทำการสอนแบบเก่าอย่างสมบูรณ์ นี่คือคลาส skybox ของฉัน: static ShaderProgram* cubeMapShader = nullptr; static const GLfloat vertices[] = { 1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f, 1.0f, -1.0f, -1.0f, -1.0f, …
14 c++  opengl  glsl  cubemap  skybox 

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
ลำดับของข้อมูลบัฟเฟอร์จุดสุดยอดเมื่อเรนเดอร์สสารดั้งเดิมมีการทำดัชนีหรือไม่?
ฉันกำลังสร้างสามเหลี่ยมสามมิติของวัตถุ ถ้าฉันสามารถเขียนมันลงในบัฟเฟอร์ตามลำดับที่คำนวณได้มันจะทำให้รหัส CPU ง่ายขึ้น จุดยอดสำหรับรูปสามเหลี่ยมจะไม่ต่อเนื่องกัน มีการลงโทษในการปฏิบัติงานใด ๆ สำหรับการเขียนออกคำสั่งหรือไม่?
14 opengl 

1
หน่วยการแปลหน่วย Orthographic ไม่ตรงกันในตาราง (เช่น 64 พิกเซลแปลไม่ถูกต้อง)
ฉันกำลังมองหาข้อมูลเชิงลึกเกี่ยวกับปัญหาเล็ก ๆ ด้วยการแปลหน่วยบนกริด อัปเดตและแก้ไข ฉันแก้ไขปัญหาของฉันเอง ดูรายละเอียดด้านล่าง ทุกอย่างในส่วนนี้ของโพสต์กลายเป็นถูกต้อง หากสิ่งใดมันสามารถทำหน้าที่เป็นแบบฝึกหัด / ตัวอย่าง / ช่วยเหลือขนาดเล็กสำหรับบุคคลต่อไป ติดตั้ง FBO, VAO, VBO หน้าต่าง 512x448 ตาราง 64x64 gl_Position = projection * world * position; projectionถูกกำหนดโดยortho(-w/2.0f, w/2.0f, -h/2.0f, h/2.0f);นี่คือฟังก์ชั่นการฉายภาพแบบตั้งฉากกับตำรา world ถูกกำหนดโดยตำแหน่งกล้องคงที่ที่ (0, 0) position ถูกกำหนดโดยตำแหน่งของสไปรต์ ปัญหา ในภาพหน้าจอด้านล่าง (มาตราส่วน 1: 1) ระยะห่างของกริดคือ 64x64 และฉันกำลังวาดหน่วยที่ (64, 64) อย่างไรก็ตามหน่วยวาดประมาณ ~ 10px …

3
ฉันจะใช้กล้องที่มีพื้นฐานเป็น quaternion ได้อย่างไร
อัพเดทข้อผิดพลาดที่นี่เป็นเรื่องง่าย ฉันพลาดเรเดียนถึงการแปลงองศา ไม่จำเป็นต้องอ่านทุกอย่างถ้าคุณมีปัญหาอื่น ฉันดูบทเรียนหลายอย่างเกี่ยวกับเรื่องนี้และเมื่อฉันคิดว่าฉันเข้าใจฉันพยายามที่จะใช้กล้องที่เป็น quaternion ปัญหาคือมันทำงานไม่ถูกต้องหลังจากหมุนไปประมาณ 10 องศากระโดดกลับไปที่ -10 องศา ฉันไม่รู้ว่าเกิดอะไรขึ้น ฉันใช้ openTK และมีคลาส quaternion อยู่แล้ว ฉันเป็น noob ที่ opengl ฉันกำลังทำเพื่อความสนุกและไม่เข้าใจ quaternions ดังนั้นฉันอาจจะทำอะไรโง่ ๆ ที่นี่ นี่คือรหัสบางส่วน: (จริงๆแล้วเกือบทั้งหมดรหัสยกเว้นวิธีการที่โหลดและวาด vbo (มันถูกนำมาจากตัวอย่าง OpenTK ที่แสดงให้เห็นถึง vbo-s)) ฉันโหลดลูกบาศก์ลงใน vbo และเริ่มต้น quaternion สำหรับกล้อง protected override void OnLoad(EventArgs e) { base.OnLoad(e); cameraPos = new Vector3(0, 0, 7); …

2
เมื่อใดที่จะใช้อาร์เรย์จุดสุดยอดและเมื่อใดที่จะใช้ VBO
ฉันพยายามเรียนรู้เกี่ยวกับอาร์เรย์จุดยอดและวัตถุบัฟเฟอร์จุดสุดยอดแต่ฉันไม่เข้าใจความแตกต่างในแง่ของ: กรณีใช้งาน (เรขาคณิตคงที่เช่นภูมิประเทศเรขาคณิตที่เปลี่ยนแปลงทุกเฟรมเช่นระบบอนุภาค ฯลฯ ) ประสิทธิภาพ พกพาได้ (การ์ดกราฟิกเก่าคอนโซลอุปกรณ์เช่น Android หรือ iPhone ฯลฯ ) ชี้แจงบ้างไหม?
14 opengl 

1
มีผลประโยชน์ด้านประสิทธิภาพใด ๆ หรือไม่ในการแบ่งปันความแตกต่างระหว่างโปรแกรมต่าง ๆ ?
OpenGL อนุญาตให้คุณแชร์ shader เดียวกันระหว่างหลาย ๆ โปรแกรม นอกเหนือจากการบันทึกหน่วยความจำขนาดเล็กและด้ามจับ shader แล้วยังมีประสิทธิภาพด้าน GPU อีกไหมในการทำเช่นนี้?

2
การเคลื่อนไหวนั้นขึ้นอยู่กับอัตราเฟรมแม้จะใช้ Time.deltaTime
ฉันมีรหัสต่อไปนี้เพื่อคำนวณการแปลที่จำเป็นในการย้ายวัตถุเกมใน Unity ซึ่งเรียกว่าLateUpdateมา จากสิ่งที่ฉันเข้าใจการใช้งานของฉันTime.deltaTimeควรจะทำให้เป็นอิสระแปลสุดท้ายอัตราเฟรม (โปรดทราบCollisionDetection.Move()เป็นเพียงการแสดง raycasts) public IMovementModel Move(IMovementModel model) { this.model = model; targetSpeed = (model.HorizontalInput + model.VerticalInput) * model.Speed; model.CurrentSpeed = accelerateSpeed(model.CurrentSpeed, targetSpeed, model.Accel); if (model.IsJumping) { model.AmountToMove = new Vector3(model.AmountToMove.x, model.AmountToMove.y); } else if (CollisionDetection.OnGround) { model.AmountToMove = new Vector3(model.AmountToMove.x, 0); } model.FlipAnim = flipAnimation(targetSpeed); // If …

5
ประโยชน์ของการกำหนดเฟรมต่อวินาทีคืออะไร (ถ้ามี)
ฉันกำลังทำงานกับเกมง่ายๆใน OpenGL โดยใช้ SDL สำหรับการเริ่มต้นการแสดงผลและการป้อนข้อมูลและปรากฏในแง่ของเวลาที่ฉันมีสองตัวเลือกให้ฉัน หมายเลขหนึ่งที่กำลังนอนหลับสำหรับ optimTimePerFrame - theTimeTakenToRender, เมื่อ optimTimePerFrame ในวินาที = 1 / theFramerateCap (ฉันไม่แน่ใจว่าสิ่งนี้จำเป็นหรือไม่เพราะมันเทียบเท่ากับการใช้ vsync ซึ่งอาจแม่นยำกว่านี้ถ้าการสันนิษฐานของฉันถูกต้องกรุณาบอกฉันทีว่า SDL + OpenGL มี vsync เป็นค่าเริ่มต้นหรือไม่อย่างไร เพื่อเปิดใช้งาน) ส่วนอีกอันคือการวัดเวลาตั้งแต่เฟรมสุดท้ายแสดงผลและปรับการเคลื่อนไหวตามนั้น (เวลาที่สั้นลงในการเรนเดอร์เฟรมจะทำให้เอนทิตีน้อยเคลื่อนไปในเฟรมนั้น) ในแง่ของประสิทธิภาพและการลดการสั่นไหว ฯลฯ ข้อดีและข้อเสียของสองวิธีนี้คืออะไร
13 opengl  sdl  frame-rate  vsync 

1
จะลดขนาดภาพโดยไม่มีการปรับพิกเซลได้อย่างไร?
ฉันเห็นเกมจำนวนมากที่มีตัวอักษรขอบเรียบและภาพความละเอียดสูง แต่เมื่อฉันพยายามลดภาพเพื่อบอกว่า 64x64 สำหรับตัวละครของฉันฉันเพิ่งได้รับพิกเซลแบบยุ่ง ๆ แม้ว่าฉันจะเริ่มต้นด้วยผ้าใบ 64x64 ฉันจะได้รับขอบตัวหนังสือ ฉันควรปรับขนาดด้วย OpenGL หรือไม่ หรือมีเทคนิคบางอย่างกับ photoshop หรือ pixen ที่ฉันไม่รู้?

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