2010-08-11 19 views
7

अगर कोई ट्यूटोरियल है कि परिचय 3 डी ग्राफिक्स सिद्धांत OpenGL या DirectX या कुछ का उपयोग कर, प्रासंगिक कोड दिखाते हुए बिना था मैं सोच रहा था। मैं इंजीनियरिंग गणित के साथ बहुत सहज हूं (मैं एक ए/वी डीएसपी छात्र हूं, इसलिए मैं हर समय गणित के साथ काम करता हूं)।3 डी ग्राफिक्स सिद्धांत और कोड ओपन के बिना, DirectX, XNA, एट अल

ट्यूटोरियल मैं या तो देखने के अधिकांश मुझे वही पुरानी मैट्रिक्स अनुवाद/रोटेशन उदाहरणों से पता चलता, अनुमानों पर एक चर्चा के साथ साथ और समान त्रिकोण कैसे अनुमानों काम का उपयोग कर मुझे दिखाने या मान लें कि आपके 3 डी के बारे में सब कुछ पता है या बस का एक समूह का उपयोग ओपनजीएल प्राइमेटिव्स। मैंने इस विषय पर एक पुस्तक (इंटरेक्टिव कंप्यूटर ग्राफिक्स: ए टॉप-डाउन दृष्टिकोण) का आदेश दिया है लेकिन मैं अभी शुरू करना चाहता हूं।

मुझे वास्तव में ऐसा कुछ पसंद है जो सिर्फ एक एसडीएल सतह या जावा ग्राफिक्स 2 डी ऑब्जेक्ट के साथ काम करता है और बस सबकुछ प्रस्तुत करने के लिए मैट्रिक्स गणित का उपयोग करता है। मैं कुछ साधारण सामान करने में सक्षम होने की उम्मीद कर रहा था, जैसे पुस्तक आने से पहले कुछ सरल आकार प्रदान करना। आदर्श रूप से कुछ ऐसा जो विषयों को पेश करता है और उन्होंने कैसे काम किया, इस पर कोड किए गए उदाहरण दिए।

संपादित करें: सभी उत्तरों बहुत अच्छे थे, लेकिन मुझे बस कोड पसंद आया। वास्तव में क्या मैं खोज रहा था, भले ही वह पास्कल में था, - (उदाहरण के लिए मध्य 80 के दशक से कुछ ओपन मई)

उत्तर

7

कुछ पुराने पास्कल स्रोत को बाहर निकाला: डी लगभग 14 साल पहले, मैंने इसे बहुत सरल 3 डी ऑब्जेक्ट्स प्रदर्शित करने के लिए उपयोग किया था। xrot, yrot, zrot घूर्णन मैट्रिक्स द्वारा गुणा अंक ([x, y, z] घुमाने के लिए हैं)। और मैंने स्क्रीन के बीच में गायब होने के बिंदु के साथ गायब होने के बिंदु पर आधारित एक बहुत ही सरल 3 डी-टू-2 डी-ट्रांसफॉर्मेशन का उपयोग किया। एक उदाहरण के रूप में, एक vertex सरणी परिभाषित किया गया है। आपको एक ट्रिगोन सरणी भी जोड़नी होगी।

const depth = 1500; 
     deg = pi/180; 

     { some vertices for a dice :) } 
     vertices:array[0..23] of real= (50, 50, 50,  { 0} 
           -50, 50, 50,  { 1} 
            50,-50, 50,  { 2} 
           -50,-50, 50,  { 3} 
            50, 50,-50,  { 4} 
           -50, 50,-50,  { 5} 
            50,-50,-50,  { 6} 
           -50,-50,-50,  { 7} 
           ); 

{ transform 3d coordinates to pixel coordinates } 
procedure 3d_to_2d(x, y, z : real; var px, py : longint); 
var k:real; 
begin 
k:=((depth shr 1)+z)/depth; 
px:=(getmaxx shr 1)+trunc(x*k);  { getmaxx is the width of the screen } 
py:=(getmaxy shr 1)+trunc(y*k);  { getmaxy is the height of the screen } 
end; 

{ rotate around the x axis by rx degrees } 
procedure xrot(var x,y,z:real;rx:integer); 
var x1,y1,z1:real; 
begin 
y1:=(y * cos(rx * deg))+(z* (sin(rx * deg))); 
z1:=(-y* sin(rx * deg))+(z* (cos(rx * deg))); 
y:=y1; z:=z1; 
end; 

{ rotate around the y axis by ry degrees } 
procedure yrot(var x,y,z:real;ry:integer); 
var x1,y1,z1:real; 
begin 
x1:=(x * cos(ry * deg))+(z*(sin(ry * deg))); 
z1:=(-x * sin(ry * deg))+(z*(cos(ry * deg))); 
x:=x1; z:=z1; 
end; 

{ rotate around the z axis by rz degrees } 
procedure zrot(var x,y,z:real; rz:integer); 
var x1,y1,z1:real; 
begin 
x1:=(x* cos(rz * deg))+(y*(sin(rz * deg))); 
y1:=(-x* sin(rz * deg))+(y*(cos(rz * deg))); 
x:=x1; y:=y1; 
end; 

भरा trigons के लिए, मैं एक दोस्त के समारोह है, जो क्षैतिज लाइनों का उपयोग कर आकार (Hline (एक्स, वाई, चौड़ाई, रंग)) ड्रॉ प्रयोग किया है:

TYPE pt=RECORD x,y:LongInt;END; 

PROCEDURE Tri(P:ARRAY OF pt;co:BYTE); 
VAR q,w:INTEGER; 
    S:pt; 
    f12,f13,f23:LongInt; 
    s1,s2:LongInt; 


BEGIN 

    IF p[0].y>p[2].y THEN BEGIN s:=p[0];p[0]:=p[2];p[2]:=s;END; { sort the points } 
    IF p[0].y>p[1].y THEN BEGIN s:=p[0];p[0]:=p[1];p[1]:=s;END; 
    IF p[1].y>p[2].y THEN BEGIN s:=p[1];p[1]:=p[2];p[2]:=s;END; 

    q:=(p[0].y-p[1].y); { y distance between point 0 and 1 } 
    IF q<>0 THEN f12:=LongInt((p[0].x-p[1].x) shl 6) DIV q ELSE f12:=0; 

    q:=(p[0].y-p[2].y); 
    IF q<>0 THEN f13:=LongInt((p[0].x-p[2].x) shl 6) DIV q ELSE f13:=0; 

    q:=(p[1].y-p[2].y); 
    IF q<>0 THEN f23:=LongInt((p[1].x-p[2].x) shl 6) DIV q ELSE f23:=0; 

    s1:=p[0].x shl 6;s2:=s1; 
    FOR q:=p[0].y TO p[1].y DO 
    BEGIN 
    Hline(s1 shr 6,s2 shr 6,q,co); 
    s1:=s1+f12; 
    s2:=s2+f13; 
    END; 
    s1:=p[2].x shl 6;s2:=s1; 
    FOR q:=p[2].y DOWNTO p[1].y DO 
    BEGIN 
    Hline(s1 shr 6,s2 shr 6,q,co); 
    s1:=s1-f23; 
    s2:=s2-f13; 
    END; 
END; 
+2

+1: डी – Seth

2

एक OpenGL और DirectX समाधान से बचने के लिए जिस तरह से बड़े ग्राफिक्स किताबें है कि OpenGL और DirectX से पहले बन देखने के लिए है चारों ओर रहे हैं, लेकिन पीसी पर व्यापक रूप से उपयोग में नहीं हैं)। जीडब्ल्यूबीसिक या इसी तरह से अनुवाद करने के लिए तैयार रहें। ;>

या, बस एक त्रिकोणमित्री पाठ्यपुस्तक उठाएं। प्रोजेक्टिंग 3 डी कॉर्ड 2 डी के लिए ट्रिगर के अलावा कुछ भी नहीं है और कभी-कभी ट्रिग किताबों में एक उन्नत विषय के रूप में कवर किया जाता है।

+0

आकार और सामान भरने के बारे में क्या? – GrayGnome

+0

मध्य 80s थोड़ा बहुत दूर है (शायद इतना पर्याप्त है कि कोई कोड उदाहरण सी ++ में नहीं होगा)। मेरे पास 90 के उत्तरार्ध से कुछ गेम प्रोग्रामिंग पुस्तकें हैं जो सॉफ्टवेयर 3 डी पर विस्तार से चर्चा करती हैं - डेटा संरचनाएं, ज्यामिति, प्रतिपादन मोड, अनुकूलन इत्यादि। (पहले उपभोक्ता 3 डी हार्डवेयर त्वरक ने 1 99 6-आईएसएच तक बड़े पैमाने पर बाजार नहीं मारा)। – Seth

+0

सिग ग्राफ पेपर की तलाश करें। वे इस तरह की बहुत सारी चीज़ें ढकते हैं। – dthorpe

2

लेखों की इस श्रृंखला ने मुझे 3 डी ग्राफिक्स की मूल बातें समझने में मदद की: Exploring 3D in Flash। लेख फ्लैश डोम पर्यावरण में एक्शनस्क्रिप्ट/ईसीएमएस्क्रिप्ट में हैं लेकिन इसे आसानी से अन्य वातावरण में अनुवादित किया जा सकता है।

मैंने व्यक्तिगत रूप से टीसीएल/टीके ड्राइंग पर उदाहरणों का अनुवाद करके लेखों का पालन किया। आप ड्राइंग करने के लिए एचटीएमएल 5 कैनवास या Raphael जैसे कुछ जावास्क्रिप्ट के लिए पर्ल/टीसी या TkInter का उपयोग कर सकते हैं या बहुत करीब अनुवाद कर सकते हैं। लेख के अंत तक आपके पास एक साधारण लेकिन उपयोग करने योग्य 3 डी एपीआई होगा।

4

यह पुस्तक प्राप्त

या कम से कम इसे अपने निकटतम विश्वविद्यालय पुस्तकालय से उधार लें।

Computer graphics, principles and practice


यह कुछ ही अब पुराने साल है, लेकिन यह (प्रोग्राम शेडर क्रांति से पहले) था ग्राफिक्स बाईबल पर विचार किया। आप शायद इनपुट विधियों और फ्लेलेटिज्ड डिस्प्ले के बारे में पहले कुछ अध्यायों को छोड़ सकते हैं, लेकिन बाकी सब कुछ असाधारण रूप से अच्छी तरह से खड़ा हुआ है।

+0

यह 2 ग्राफिक्स किताबों में से एक है जो मैं रखता हूं (दूसरा गुम हो गया है) और यह एक बाइबल से मोटा है :-) यहां गलत नहीं जा सकता है। – phkahler

संबंधित मुद्दे