tag:blogger.com,1999:blog-60053754415719651342024-03-13T13:18:47.379-07:00vasily developerVasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.comBlogger23125tag:blogger.com,1999:blog-6005375441571965134.post-63859813412844421502013-08-09T20:37:00.007-07:002021-01-15T13:25:33.804-08:00My first collision algorithm<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs8hWNox7wVhOySF9Nvaws0GpZxCePOu_ytE2FCu2ShFLQAppz6I4FuOnDwBv1o-hDI_c3G5G5ketWLwiymhQB5jBv-UDAr7370QKfP_tDasyYTGmacpEL1bYMbEu0Yf2tNGHqiR1B3tN_/s1600/image.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="239" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjs8hWNox7wVhOySF9Nvaws0GpZxCePOu_ytE2FCu2ShFLQAppz6I4FuOnDwBv1o-hDI_c3G5G5ketWLwiymhQB5jBv-UDAr7370QKfP_tDasyYTGmacpEL1bYMbEu0Yf2tNGHqiR1B3tN_/s320/image.png" width="320" /></a></div>
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:RelyOnVML/>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>ES</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-ansi-language:ES;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1085"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
<o:rules v:ext="edit">
<o:r id="V:Rule1" type="connector" idref="#_x0000_s1074"/>
<o:r id="V:Rule2" type="connector" idref="#_x0000_s1040"/>
<o:r id="V:Rule3" type="connector" idref="#_x0000_s1034"/>
<o:r id="V:Rule4" type="connector" idref="#_x0000_s1037"/>
<o:r id="V:Rule5" type="connector" idref="#_x0000_s1071"/>
<o:r id="V:Rule6" type="connector" idref="#_x0000_s1038"/>
<o:r id="V:Rule7" type="connector" idref="#_x0000_s1067"/>
<o:r id="V:Rule8" type="connector" idref="#_x0000_s1075"/>
<o:r id="V:Rule9" type="connector" idref="#_x0000_s1046"/>
<o:r id="V:Rule10" type="connector" idref="#_x0000_s1068"/>
<o:r id="V:Rule11" type="connector" idref="#_x0000_s1043"/>
<o:r id="V:Rule12" type="connector" idref="#_x0000_s1048"/>
<o:r id="V:Rule13" type="connector" idref="#_x0000_s1041"/>
<o:r id="V:Rule14" type="connector" idref="#_x0000_s1069"/>
<o:r id="V:Rule15" type="connector" idref="#_x0000_s1062"/>
<o:r id="V:Rule16" type="connector" idref="#_x0000_s1027"/>
<o:r id="V:Rule17" type="connector" idref="#_x0000_s1044"/>
<o:r id="V:Rule18" type="connector" idref="#_x0000_s1056"/>
<o:r id="V:Rule19" type="connector" idref="#_x0000_s1063"/>
<o:r id="V:Rule20" type="connector" idref="#_x0000_s1039"/>
<o:r id="V:Rule21" type="connector" idref="#_x0000_s1052"/>
<o:r id="V:Rule22" type="connector" idref="#_x0000_s1082"/>
<o:r id="V:Rule23" type="connector" idref="#_x0000_s1081"/>
<o:r id="V:Rule24" type="connector" idref="#_x0000_s1064"/>
<o:r id="V:Rule25" type="connector" idref="#_x0000_s1080"/>
<o:r id="V:Rule26" type="connector" idref="#_x0000_s1053"/>
<o:r id="V:Rule27" type="connector" idref="#_x0000_s1047"/>
<o:r id="V:Rule28" type="connector" idref="#_x0000_s1079"/>
<o:r id="V:Rule29" type="connector" idref="#_x0000_s1036"/>
<o:r id="V:Rule30" type="connector" idref="#_x0000_s1084"/>
<o:r id="V:Rule31" type="connector" idref="#_x0000_s1077"/>
<o:r id="V:Rule32" type="connector" idref="#_x0000_s1042"/>
<o:r id="V:Rule33" type="connector" idref="#_x0000_s1049"/>
<o:r id="V:Rule34" type="connector" idref="#_x0000_s1059"/>
<o:r id="V:Rule35" type="connector" idref="#_x0000_s1051"/>
<o:r id="V:Rule36" type="connector" idref="#_x0000_s1065"/>
<o:r id="V:Rule37" type="connector" idref="#_x0000_s1050"/>
<o:r id="V:Rule38" type="connector" idref="#_x0000_s1030"/>
</o:rules>
</o:shapelayout></xml><![endif]-->
<br />
<div class="MsoNormal">
<span style="font-size: large;"><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;">Introduction</span></b></span></div>
<br />
When I started 3D programming I soon realized that a lot of things I
gave for granted on all the games I played, weren’t so. For example in a
3D world there are only textures and triangles to be drawn. Collisions
and a lot of things alike have to be created on your own. That means
that if you want the camera not to pass through a wall you have to
create an internal geometric representation of the wall and manage the
logic yourself.<br />
I want to point out that there are many approaches
for handling collisions. I am only showing my approach, I think that
everything should be from simple to complex. I have seen so many people
trying to enter to the 3D programming world but most of them back out
because a lot of tutorials demand previous background of so many areas
of knowledge that people get usually overwhelmed. <br />
About the math
used in this article, I studied it at school when I was about 12 years
old, so I guess you don’t need to have a solid background to understand
this and won’t be rocket science.<br />
I say again this algorithm its only
my approach I think there are far more better on the web but this one
its pretty simple and it puts you on the right way.<br />
<div class="MsoNormal" style="text-align: justify;">
<span style="mso-ansi-language: EN-US;"></span><br />
<a name='more'></a></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="font-size: large;"><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;">Some
before diving into the code.</span></b></span></div>
<div class="MsoNormal" style="text-align: justify;">
<br />
First of all I assume I am handling 2D collisions. I am on a 3D
environment but the floor is a flat surface. It’s like looking at a maze
from above, the walls can be considered line segments and the camera
can be considered a point. If I plot those line segments into a
coordinate axis I can make use of analytic geometry to perform some
collision calculations. So if say I don’t want my camera to get near a
wall (in this case a wall is a line segment) no more than 1 unit; Then
every time I move my camera I check the distance to all those line
segments and if one distance is less than 1 unit then there is a
collision and the camera won’t move to that direction. Of course, the
new position has to be checked before moving the camera.<br />
<br />
This image give you an overview of my method:<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-12772000-1377198102.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-12772000-1377198102.jpg" width="320" /></a></div>
</div>
<br />
This has a drawback. You have to create your line segments on your
own. That means that if you have a room then you have to create 4 line
segments. That does bring another complication because you don’t get to
know the coordinates of the points. Been this demo only for educational
purposes I have created in the scene a code that displays on the left
top side of the screen the current position of the camera. You go into
one corner write down the coordinates the go to the other corner of the
wall and write down to other coordinate. In this way you have the 2
points needed to create a line segment. I know you have to work a lot to
create all the collisions for a simple scene but this goes in order to
gain in understanding. Later on if you want to simplify you can make
dummy points on the 3D object and interpret them on the code later<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-65716100-1377198072.jpg" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-65716100-1377198072.jpg" style="margin-left: 1em; margin-right: 1em;"><br /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-65716100-1377198072.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-65716100-1377198072.jpg" width="320" /></a></div>
<div class="MsoNormal" style="text-align: justify;">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:OfficeDocumentSettings>
<o:RelyOnVML/>
<o:AllowPNG/>
</o:OfficeDocumentSettings>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:TrackMoves/>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:DoNotPromoteQF/>
<w:LidThemeOther>ES</w:LidThemeOther>
<w:LidThemeAsian>X-NONE</w:LidThemeAsian>
<w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
<w:SplitPgBreakAndParaMark/>
<w:EnableOpenTypeKerning/>
<w:DontFlipMirrorIndents/>
<w:OverrideTableStyleHps/>
</w:Compatibility>
<m:mathPr>
<m:mathFont m:val="Cambria Math"/>
<m:brkBin m:val="before"/>
<m:brkBinSub m:val="--"/>
<m:smallFrac m:val="off"/>
<m:dispDef/>
<m:lMargin m:val="0"/>
<m:rMargin m:val="0"/>
<m:defJc m:val="centerGroup"/>
<m:wrapIndent m:val="1440"/>
<m:intLim m:val="subSup"/>
<m:naryLim m:val="undOvr"/>
</m:mathPr></w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267">
<w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/>
<w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/>
<w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/>
<w:LsdException Locked="false" Priority="39" Name="toc 1"/>
<w:LsdException Locked="false" Priority="39" Name="toc 2"/>
<w:LsdException Locked="false" Priority="39" Name="toc 3"/>
<w:LsdException Locked="false" Priority="39" Name="toc 4"/>
<w:LsdException Locked="false" Priority="39" Name="toc 5"/>
<w:LsdException Locked="false" Priority="39" Name="toc 6"/>
<w:LsdException Locked="false" Priority="39" Name="toc 7"/>
<w:LsdException Locked="false" Priority="39" Name="toc 8"/>
<w:LsdException Locked="false" Priority="39" Name="toc 9"/>
<w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/>
<w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/>
<w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/>
<w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/>
<w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/>
<w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/>
<w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/>
<w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/>
<w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/>
<w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/>
<w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/>
<w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/>
<w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/>
<w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/>
<w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/>
<w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/>
<w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/>
<w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/>
<w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/>
<w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/>
<w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/>
<w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/>
<w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/>
<w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/>
<w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/>
<w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/>
<w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/>
<w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/>
<w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/>
<w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/>
<w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/>
<w:LsdException Locked="false" Priority="37" Name="Bibliography"/>
<w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/>
</w:LatentStyles>
</xml><![endif]--><!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-parent:"";
mso-padding-alt:0in 5.4pt 0in 5.4pt;
mso-para-margin-top:0in;
mso-para-margin-right:0in;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0in;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;
mso-ansi-language:ES;}
</style>
<![endif]--><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1085"/>
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1"/>
<o:rules v:ext="edit">
<o:r id="V:Rule1" type="connector" idref="#_x0000_s1074"/>
<o:r id="V:Rule2" type="connector" idref="#_x0000_s1040"/>
<o:r id="V:Rule3" type="connector" idref="#_x0000_s1034"/>
<o:r id="V:Rule4" type="connector" idref="#_x0000_s1037"/>
<o:r id="V:Rule5" type="connector" idref="#_x0000_s1071"/>
<o:r id="V:Rule6" type="connector" idref="#_x0000_s1038"/>
<o:r id="V:Rule7" type="connector" idref="#_x0000_s1067"/>
<o:r id="V:Rule8" type="connector" idref="#_x0000_s1075"/>
<o:r id="V:Rule9" type="connector" idref="#_x0000_s1046"/>
<o:r id="V:Rule10" type="connector" idref="#_x0000_s1068"/>
<o:r id="V:Rule11" type="connector" idref="#_x0000_s1043"/>
<o:r id="V:Rule12" type="connector" idref="#_x0000_s1048"/>
<o:r id="V:Rule13" type="connector" idref="#_x0000_s1041"/>
<o:r id="V:Rule14" type="connector" idref="#_x0000_s1069"/>
<o:r id="V:Rule15" type="connector" idref="#_x0000_s1062"/>
<o:r id="V:Rule16" type="connector" idref="#_x0000_s1027"/>
<o:r id="V:Rule17" type="connector" idref="#_x0000_s1044"/>
<o:r id="V:Rule18" type="connector" idref="#_x0000_s1056"/>
<o:r id="V:Rule19" type="connector" idref="#_x0000_s1063"/>
<o:r id="V:Rule20" type="connector" idref="#_x0000_s1039"/>
<o:r id="V:Rule21" type="connector" idref="#_x0000_s1052"/>
<o:r id="V:Rule22" type="connector" idref="#_x0000_s1082"/>
<o:r id="V:Rule23" type="connector" idref="#_x0000_s1081"/>
<o:r id="V:Rule24" type="connector" idref="#_x0000_s1064"/>
<o:r id="V:Rule25" type="connector" idref="#_x0000_s1080"/>
<o:r id="V:Rule26" type="connector" idref="#_x0000_s1053"/>
<o:r id="V:Rule27" type="connector" idref="#_x0000_s1047"/>
<o:r id="V:Rule28" type="connector" idref="#_x0000_s1079"/>
<o:r id="V:Rule29" type="connector" idref="#_x0000_s1036"/>
<o:r id="V:Rule30" type="connector" idref="#_x0000_s1084"/>
<o:r id="V:Rule31" type="connector" idref="#_x0000_s1077"/>
<o:r id="V:Rule32" type="connector" idref="#_x0000_s1042"/>
<o:r id="V:Rule33" type="connector" idref="#_x0000_s1049"/>
<o:r id="V:Rule34" type="connector" idref="#_x0000_s1059"/>
<o:r id="V:Rule35" type="connector" idref="#_x0000_s1051"/>
<o:r id="V:Rule36" type="connector" idref="#_x0000_s1065"/>
<o:r id="V:Rule37" type="connector" idref="#_x0000_s1050"/>
<o:r id="V:Rule38" type="connector" idref="#_x0000_s1030"/>
</o:rules>
</o:shapelayout></xml><![endif]-->
<br />
<div class="MsoNormal" style="text-align: justify;">
<br />
<span style="font-size: large;"><b style="mso-bidi-font-weight: normal;"><span style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;">Steps
to determine a collision</span></b></span></div>
<br />
The main objective of this demonstration is finding out the distance
between a point (camera) and a line segment (wall). Here are the steps
to find it out.<br />
<br />
1. A line segment is defined by 2 points and is contained in a linear function of the type: <br />
Y
= MX + N where M is the pendent of the equation and N is where it
intersects the Y axis. The first step is finding out that equation. M
can be found using the 2 points of the line segment and its equation is M
= (Y1 – Y2)/(X1 - X2); to avoid division by zero I add a very small
number if (X1 - X2) leads to zero;<br />
<div class="MsoListParagraphCxSpLast" style="text-align: justify;">
</div>
<table cellpadding="0" cellspacing="0" style="width: 100%px;">
<tbody>
<tr>
<td><br /></td></tr>
</tbody></table>
<span style="mso-ansi-language: EN-US;"></span> <br />
<div class="MsoNormal" style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-98463400-1377197216.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-98463400-1377197216.jpg" width="320" /></a></div>
<br />
<br /></div>
<div class="MsoListParagraph" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -0.25in;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">2.<span style="font: 7pt "Times New Roman";">
</span></span></span><span style="mso-ansi-language: EN-US;">Later you
try to find out the equation of the linear function perpendicular to that
equation. For that you know that the pendent of that equation is M2 = - 1/M1</span></div>
<div class="MsoNormal" style="margin-left: 0.25in; text-align: justify;">
</div>
<table cellpadding="0" cellspacing="0" style="width: 100%px;">
<tbody>
<tr>
<td><br /></td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" style="width: 100%px;">
<tbody>
<tr>
<td></td>
</tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" style="width: 100%px;">
<tbody>
<tr>
<td><br /></td>
</tr>
</tbody></table>
<span style="mso-ansi-language: EN-US;"> </span>
<br />
<div class="MsoNormal" style="text-align: justify;">
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-31178400-1377197247.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-31178400-1377197247.jpg" width="320" /></a></div>
</div>
<br clear="ALL" style="mso-ignore: vglayout;" />
<div class="MsoListParagraphCxSpFirst" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -0.25in;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">3.<span style="font: 7pt "Times New Roman";">
</span></span></span><span style="mso-ansi-language: EN-US;">Then you
Equals the 2 functions trying to find the intersection point</span></div>
<div class="MsoListParagraphCxSpMiddle" style="text-align: justify;">
<span lang="ES">M1X
+ N1 = M2X + N2</span></div>
<div class="MsoListParagraphCxSpMiddle" style="text-align: justify;">
<span lang="ES">X
= (N2 – N1)/ (M1 – M2)</span></div>
<div class="MsoListParagraphCxSpMiddle" style="text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="text-align: justify;">
<span style="mso-ansi-language: EN-US;">Y it’s found replacing X in any of the two equations</span></div>
<div class="MsoListParagraphCxSpMiddle" style="text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpMiddle" style="mso-list: l0 level1 lfo1; text-align: justify; text-indent: -0.25in;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">4.<span style="font: 7pt "Times New Roman";">
</span></span></span><span style="mso-ansi-language: EN-US;">When you
find the intersection<span style="mso-spacerun: yes;"> </span>point there are 3
choices</span></div>
<div class="MsoListParagraphCxSpLast" style="margin-left: 1in; mso-add-space: auto; mso-list: l1 level2 lfo2; text-align: justify; text-indent: -0.25in;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">a.<span style="font: 7pt "Times New Roman";">
</span></span></span><span style="mso-ansi-language: EN-US;">Intersection
point is contained in the line segment</span></div>
<table cellpadding="0" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td></td></tr>
</tbody></table>
<table cellpadding="0" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td></td><td></td><td></td><td></td>
</tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-58499600-1377197270.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-58499600-1377197270.jpg" width="320" /></a></div>
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"> <span style="mso-list: Ignore;">b.<span style="font: 7pt "Times New Roman";">
</span></span></span><span style="mso-ansi-language: EN-US;">Intersection
point is not contained on the line segment and is near of one extreme of the
line segment</span><br />
<br />
<table cellpadding="0" cellspacing="0" style="width: 100%px;"><tbody>
<tr><td></td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-37072500-1377197908.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-37072500-1377197908.jpg" width="320" /></a></div>
<br />
<br />
<br />
<br />
<div class="MsoListParagraphCxSpFirst" style="margin-left: 1in; mso-add-space: auto; mso-list: l1 level2 lfo2; text-align: justify; text-indent: -0.25in;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"><span style="mso-list: Ignore;">c.<span style="font: 7pt "Times New Roman";">
</span></span></span><span style="mso-ansi-language: EN-US;">Intersection
point is not contained on the line segment and is near of the other extreme of
the line segment</span></div>
<div class="MsoListParagraphCxSpMiddle" style="text-align: justify;">
<br /></div>
<div class="MsoListParagraphCxSpLast" style="text-align: justify;">
</div>
<table cellpadding="0" cellspacing="0" style="width: 100%px;">
<tbody>
<tr>
<td></td></tr>
</tbody></table>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-35165800-1377198060.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-35165800-1377198060.jpg" width="320" /></a></div>
<br />
<div class="MsoNormal" style="margin-left: 0.25in; text-align: justify;">
<br /></div>
This is the main reason why I calculate the distance between the
intersection point and the 2 extremes, and then the real distance is the
less of the 3. The distance is calculated by the Euclidian method, Try
this <a class="bbc_url" href="http://en.wikipedia.org/wiki/Euclidean_distance" rel="nofollow external" title="External link">link</a> if you don’t know it, is very simple<br />
<div class="MsoNormal" style="text-align: justify;">
</div>
<table cellpadding="0" cellspacing="0" style="width: 100%px;">
<tbody>
<tr>
<td><br /></td><td><br /></td><td><br /></td><td><br /></td></tr>
</tbody></table>
<div class="MsoNormal" style="text-align: justify;">
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-65716100-1377198072.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="209" src="http://uploads.gamedev.net/monthly_08_2013/ccs-140557-0-65716100-1377198072.jpg" width="320" /></a></div>
<br />
<br />
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<b style="mso-bidi-font-weight: normal;"><span style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;">Working
with the code</span></b></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="mso-ansi-language: EN-US;">In this demo I used a small engine developed by myself to simplify other
stuff such as texture loading, drawing and others. Here is a brief look at the
classes it contains.</span></div>
<div class="MsoNormal" style="text-align: justify;">
<b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;">House.cs</span></b></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="mso-ansi-language: EN-US;">This class contains the methods to draw the house seen on the demo. Here
is the code where I create all the collisions:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 8pt;">public</span><span style="font-family: "consolas"; font-size: 8pt;"> <span style="color: blue;">void</span> CreateCollisions()</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;">{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-24.4f,
-14.1f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(18.9f,
-14.1f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-24.4f,
-14.1f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-24.4f,
13.2f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-20.2f,
-0.1f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-4.8f,
-0.1f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-0.5f,
0.7f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-0.5f,
-8.7f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(19.4f,
14.4f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-24.4f,
14.4f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(19.4f,
14.4f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(19.4f,
-14.4f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-17.5f,
0.5f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-17.5f,
11), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(13.4f,
-0.15f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(18.74f,
-0.15f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Collision</span>.AddCollisionSegment(<span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(-0.43f,
-9.1f), <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector2F</span>(12.4f,
-9.1f), 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">//Collision.GhostMode
= true;<span style="mso-spacerun: yes;"> </span></span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;">}</span></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>Note the third parameter is the
distance in which a collision will be valid, I mean if the distance of the
camera to that line segment is less than that parameter a collision event will
be triggered.</span></div>
<div class="MsoNormal" style="text-align: justify;">
<b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US;">Camera.cs</span></b></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="mso-ansi-language: EN-US;">This class handles camera movements. If you take a look at the code you
will see how collision is managed:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 8pt;">if</span><span style="font-family: "consolas"; font-size: 8pt;">
(pressedButton == 1) <span style="color: green;">// forward button is pressed</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;">{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 8pt;">if</span><span style="font-family: "consolas"; font-size: 8pt;"> (!<span style="color: #2b91af;">Collision</span>.CheckCollision(<span style="color: blue;">new</span>
<span style="color: #2b91af;">Vector3</span>(eyex - (<span style="color: blue;">float</span>)i
* forwardSpeed,<span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>eyez - (<span style="color: blue;">float</span>)k
* forwardSpeed, 0)))</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>eyex -= (<span style="color: blue;">float</span>)i
* forwardSpeed;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>eyez -= (<span style="color: blue;">float</span>)k
* forwardSpeed;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="ES" style="font-family: "consolas"; font-size: 8pt;">}<span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 8pt;">}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 9.5pt;">Note that current X and Z
position will only be updated if there is not a camera collision. Also note
that the floor is located on the XZ plane.</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">Collision.cs</span></b></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">This is the
class that handles collisions; note the code that checks for a collision</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 8pt;">public</span><span style="font-family: "consolas"; font-size: 8pt;"> <span style="color: blue;">static</span> <span style="color: blue;">bool</span>
CheckCollision(<span style="color: #2b91af;">Vector3</span> camaraPos)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;">{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span>
(!ghostMode) <span style="color: green;">//if collisions are not disabled</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">foreach</span>
(<span style="color: blue;">var</span> item <span style="color: blue;">in</span>
colitionSegments)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span>
(item.segment.DistToSegment(camaraPos) < item.ColitionDistance)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span><span lang="ES" style="font-family: "consolas"; font-size: 8pt;">{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span>
<span style="color: blue;">true</span>; </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}<span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;">
</span><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span>
<span style="color: blue;">false</span>; </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<b style="mso-bidi-font-weight: normal;"><span lang="ES" style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">Segment struct:</span></b></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">This struct
holds all the calculations explained at the bottom of this article. First it
finds the segment linear equation on the constructor and it has the method to
calculate the distance between a point and a line segment.</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 8pt;">public</span><span style="font-family: "consolas"; font-size: 8pt;"> <span style="color: blue;">float</span> DistToSegment(<span style="color: #2b91af;">Vector3</span>
other)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;">{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">//calculate the
two linear functions</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">float</span> n2 =
other.Y - m2 * other.X;<span style="mso-spacerun: yes;"> </span><span style="color: green;">//y = m2x + n<span style="mso-spacerun: yes;"> </span>m2 =
-1/m1</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">//calculate the
intersection point(i.p.)</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Vector3</span>
intersectionPoint = <span style="color: blue;">new</span> <span style="color: #2b91af;">Vector3</span>();</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>intersectionPoint.X = (n2 - n1) / (m1 - m2);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>intersectionPoint.Y = m1 *
intersectionPoint.X + n1;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">float</span> d = <span style="color: #2b91af;">Vector3</span>.DistPointToPoint(intersectionPoint,
other);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">float</span> dist1
= Point3D.DistPointToPoint(other, first);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">float</span> dist2
= Point3D.DistPointToPoint(other, second);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: green; font-family: "consolas"; font-size: 8pt;">//if the i.p.
is contained in the rect segment return d else </span><span style="font-family: "consolas"; font-size: 8pt;"></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: green; font-family: "consolas"; font-size: 8pt;">//the minimun
value between dist1 and dist2</span><span style="font-family: "consolas"; font-size: 8pt;"></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 8pt;">if</span><span style="font-family: "consolas"; font-size: 8pt;">
((intersectionPoint.X < first.X && intersectionPoint.X >
second.X) ||</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>(intersectionPoint.X > first.X
&& intersectionPoint.X < second.X))</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span>
d;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">else</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">return</span>
<span style="color: #2b91af;">Math</span>.Min(dist1, dist2);<span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 8pt;">}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<b style="mso-bidi-font-weight: normal;"><span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">Controller.cs</span></b></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">This is the
controller class; the most important part relative to this tutorial is the draw
method:</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="color: blue; font-family: "consolas"; font-size: 9.5pt;">public</span><span style="font-family: "consolas"; font-size: 9.5pt;"> <span style="color: blue;">void</span> DrawScene()</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 9.5pt;">{<span style="mso-spacerun: yes;"> </span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>house.Draw();</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span>sky.Draw();<span style="mso-spacerun: yes;">
</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">//DebugMode.WriteCamaraPos(200,
200);</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-family: "consolas"; font-size: 9.5pt;"><span style="mso-spacerun: yes;"> </span><span style="color: green;">Collision.DrawColissions();</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span lang="ES" style="font-family: "consolas"; font-size: 9.5pt;">}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">The function
WriteCamaraPos outputs to the screen the current coordinates of the camera;
this is how I find out the coordinates of both extremes of a wall to define it
as a line segment.</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">The other
commented function draws all the lines representing collisions on the scene.
This is how I see if everything is going ok. Sometimes if you want to see them,
you have to comment the code that draws the house into the screen in order to
see them.</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: 0in; mso-layout-grid-align: none; text-autospace: none;">
<span style="font-size: large;"><br /></span></div>
<div class="MsoNormal" style="text-align: justify;">
<span style="font-size: large;"><b><span style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;">Final conclusions</span></b></span></div>
You will find out that all collisions for the house on the demo have not
been implemented, only a few. If you want to learn how I did it, give
it a shot and try to complete the collisions on the scene. This approach
will place you on the right track if you want to learn this side of 3D
programming. I think this articles proves that implementing your own
collisions in a game doesnt always to have to be difficult. Also it
proves that if you really want to learn 3D programming you have to make a
lot of thing by yourself rather than rellying on a complex engine. In
this way you will be your own god and you will go as far as your mind
takes you.<br />
<br />
this is the repo link for the source code<br />
<a class="bbc_url" href="http://github.com/vtserej/3d-collision-opengl" rel="nofollow external" title="External link">https://github.com/vtserej/3d-collision-opengl/</a></div>
Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com9tag:blogger.com,1999:blog-6005375441571965134.post-51748667207954431252012-10-29T20:20:00.004-07:002020-10-23T07:03:21.939-07:003D simulation of a lathe using solids of revolution, C# and openGL<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0AL7XRjQHw8IRsnjgA6CkU2BLuOBS1qoLdIGMbdjy-G6drUnNLoL1twj2ZaaqsJtYaBT6RZhyphenhyphentWdKqz0ya6nhwfLAaL4Tqq8U1q_Qr7CJKJi1UyyAgN6hcGrw3ws7Jk6d1jBBanYrbSoW/s1600/lathe.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="173" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh0AL7XRjQHw8IRsnjgA6CkU2BLuOBS1qoLdIGMbdjy-G6drUnNLoL1twj2ZaaqsJtYaBT6RZhyphenhyphentWdKqz0ya6nhwfLAaL4Tqq8U1q_Qr7CJKJi1UyyAgN6hcGrw3ws7Jk6d1jBBanYrbSoW/s320/lathe.jpg" width="320" /></a></div>
Last month a teacher from my former college call me telling me that they were going to model all the machines in their mechanical workshop and that they will simulate all ther procesess in a 3D enviroment. They were starting with a lathe, but there was a problem, they had no idea how to make the lowering of the pieces with the lathe's blades.<br />
<br />
<a name='more'></a>After doing some research, I found out that most of the pieces made by the lathe were solids of revolution, and... I had a project named Solids of Revolution. After mixing that project with another project that loaded a workshop and had a FPS camera I had a prototype to work on.<br />
The lathe was modeled in 3D max and I exported in 3DS format. The small engine I had (Shadowengine) eased the process of loading models and textures. after that I only had to get the blade position anytime I moved it and lower the radius of the piece in the blade position and generate the revolution on the only part.<br />
I also added some particle to give more realism to the process and used my engine to play sounds.<br />
here is the structure of the project:<br />
<b>Lathe.cs:</b><br />
It handles all concerning the lathe operations, the movement of the blades,etc.<br />
<b>Piece.cs</b><br />
It handles all concerning the drawing and creation of the piece, also the solid of revolution algorithm for lowering the piece.<br />
<b>Workshop.cs</b><br />
It manages the drawing of the workshop and collitions.<br />
<b>Practice.cs </b><br />
It loads and saves all the data of the simulation to an XML file <br />
<br />
The other classes are less important. I hope this project will be usefull to anyone who face a similar problem. If you have any questions ask it here in the blog.<br />
<br />
Here is the download Link<br />
<a href="http://github.com/vtserej/3d-lathe">http://github.com/vtserej/3d-lathe</a> Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com12tag:blogger.com,1999:blog-6005375441571965134.post-31214682844324204002012-05-07T13:11:00.000-07:002012-10-30T08:49:30.866-07:00A new version of my 3D asteroid game in OpenGL with C# <!--[if !mso]> <style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style> <![endif]--><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML/> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves>false</w:TrackMoves> <w:TrackFormatting/> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>ES</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
</style> <![endif]--> <br />
<div align="center" class="MsoNormal" style="text-align: center;">
<img alt="" src="data:image/png;base64,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" /><b><span lang="EN-US" style="font-size: 14pt; line-height: 115%;"> </span></b></div>
<div align="center" class="MsoNormal" style="text-align: center;">
<b style="mso-bidi-font-weight: normal;"><span style="font-size: 14.0pt; line-height: 115%; mso-fareast-language: ES; mso-no-proof: yes;"> </span></b><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 14.0pt; line-height: 115%; mso-ansi-language: EN-US;"></span></b></div>
<div align="center" class="MsoNormal" style="text-align: center;">
<br /></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;">This article is an update of my first article named “A basic 3D asteroid game in OpenGL with C#”. In this version I added the shooting feature. I will try to explain it briefly here </span></div>
<div class="MsoNormal" style="text-align: justify;">
<span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;">The first thing to do is to get the mesh that contains the rocket </span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: #2b91af; font-family: Consolas; mso-ansi-language: EN-US;">Mesh</span><span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"> misiles; <span style="color: green;">//This goes as a class attribute</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;">misiles = m.GetMeshWithName(<span style="color: #a31515;">"avion07"</span>);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;">m.RemoveMeshByName(<span style="color: #a31515;">"avion07"</span>);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">After getting the mesh reference we delete it from the model because we are going to draw and manage it in a different way than the ship.</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-size: 12.0pt; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">One drawback is that in the 3d model the four rockets are recognized as a single mesh, that’s why when we shot a missile the four are shot. I don’t have too much knowledge of 3D Max to make the four missiles as single meshes and that brings another complication; the missile position is the same for all, which means that we are going to check collisions on one single point that is the center of the four missiles.</span><br />
<br />
<span lang="EN-US" style="font-size: 12pt;"></span><br />
<a name='more'></a></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="color: green; font-family: Consolas; mso-ansi-language: EN-US;">//This is the function that draws the missiles</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">void</span> DrawMisile()</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Gl</span>.glPushMatrix();</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span> (misileShot)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>missilePos.Z -= 0.1f;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Gl</span>.glTranslatef(missilePos.X, missilePos.Y, missilePos.Z);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span> (<span style="color: #2b91af;">Math</span>.Abs(missilePos.Z) > 35)</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>misileShot = <span style="color: blue;">false</span>;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>missilePos = p;</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">else</span></span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>{</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Gl</span>.glTranslatef(p.X, p.Y, p.Z);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">AsteroidGenerator</span>.CheckCollisionMissile(missilePos, 0.5f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<br /></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Gl</span>.glScalef(0.3f, 0.3f, 0.3f);</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Gl</span>.glBindTexture(<span style="color: #2b91af;">Gl</span>.GL_TEXTURE_2D,</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; margin-left: 70.8pt; margin-right: 0cm; margin-top: 0cm; mso-layout-grid-align: none; text-autospace: none; text-indent: 35.4pt;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">ContentManager</span>.GetTextureByName(<span style="color: #a31515;">"avion07.jpg"</span>));</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>misiles.Draw();</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Gl</span>.glPopMatrix();</span></div>
<div class="MsoNormal" style="line-height: normal; margin-bottom: .0001pt; margin-bottom: 0cm; mso-layout-grid-align: none; text-autospace: none;">
<span lang="EN-US" style="font-family: Consolas; mso-ansi-language: EN-US;"><span style="mso-spacerun: yes;"> </span>}</span></div>
<div class="MsoNormal" style="text-align: justify;">
<br /></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;">After getting the missile the missile may only have two statuses: when is in the ship and when is fired. If is in the ship I don’t have to do anything just translate the missiles anytime I translate the ship </span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;"></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;">I handle the missile asteroid collision in the following way. When a missile is shot it checks if it is colliding with any asteroid. It does it the same way that the ship checks collisions with the asteroids but it does another thing, if a collision is detected the asteroid Generator class ,which holds the asteroid list ,is told to delete that asteroid and to create an explosion. An explosion is a sphere object that anytime it draws it expands it size, giving the idea of a shock wave, and then when a particular size is achieved the object doesn’t draw anymore. Attention, this explosion wave follows some concepts of particle programming, which is live over time and particular way to behave.</span></div>
<div class="MsoNormal">
<br /></div>
<div class="MsoNormal">
<b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;">The project has 7 classes, one added for this feature</span></b></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">ExplosionWave.cs </span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">This is a class that<span style="mso-spacerun: yes;"> </span>handles the explosion it’s a sphere object drawn by opengl quadrics.</span><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US;"></span></b></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">AsteroidGenerator.cs</span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It handles the creation of asteroids in random places and with random sizes and speeds. It also have the method to query wether or not<span style="mso-spacerun: yes;"> </span>It have been a collision between the spaceship and an asteroid</span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Asteroid.cs</span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It handles all concerning an asteroid such as the movement, texture selection, drawing, among others</span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Star.cs</span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It has a method to create random white points and to draw them.<span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"></span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Camera.cs</span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It<span style="color: #2b91af;"> </span>handles the selection of the user camera and to set the right perspective view of the scene</span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">SpaceShip.cs </span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">This class contains all methods and attributes regarding the spaceship, such as movement, drawing, etc.</span></div>
<div class="MsoNormal">
<span lang="EN-US" style="color: #2b91af; font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Controller.cs </span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">This class manages the game creation, game logic and contains all the classes needed to run the game. Here is a portion of code</span></div>
<div class="MsoNormal">
<span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">This game is only for educational purposes. I thinks the simpler the code the beautifull it gets. Of course there a lot of things that you may improve like the diagonal moving sugestion made by the user </span><a href="http://www.codeproject.com/script/Membership/View.aspx?mid=6843572"><span lang="EN-US" style="mso-ansi-language: EN-US;">Death259</span></a><span lang="EN-US" style="mso-ansi-language: EN-US;"> that I include in this version. I also add points to the score when an asteroid is destroyed.</span></div>
<div class="MsoNormal">
<span lang="EN-US">here is the download link </span><span lang="EN-US" style="font-size: 12.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"></span></div>
<br />
<br />
<a href="http://fbe.am/6bh">http://fbe.am/6bh</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com5tag:blogger.com,1999:blog-6005375441571965134.post-45979358048488717852011-12-20T13:24:00.000-08:002011-12-20T13:24:53.093-08:00Why programmers work at nightThis post was taken from this link <a href="http://swizec.com/blog/why-programmers-work-at-night/swizec/3198">http://swizec.com/blog/why-programmers-work-at-night/swizec/3198</a><br />
I published it in my blog because I think is awsome. I gave it to read to my mother so he wont bother me anymore for working at night.<br />
<br />
A popular saying goes that <a class="zem_slink" href="http://en.wikipedia.org/wiki/Programmer" rel="wikipedia" title="Programmer">Programmers</a> are machines that turn caffeine into <a class="zem_slink" href="http://en.wikipedia.org/wiki/Source_code" rel="wikipedia" title="Source code">code</a>.<br />
<a name='more'></a><div class="mceTemp"></div>And sure enough, ask a random programmer when they do their best work and there’s a high chance they will admit to a lot of late nights. Some earlier, some later. A popular trend is to get up at 4am and get some work done before the day’s craziness begins. Others like <em>going</em> to bed at 4am.<br />
At the gist of all this is avoiding distractions. But you could just lock the door, what’s so special about the night?<br />
I think it boils down to three things: the maker’s schedule, the sleepy brain and bright computer screens.<br />
<h2>The maker’s schedule</h2><a class="zem_slink" href="http://paulgraham.com/" rel="homepage" title="Paul Graham (computer programmer)">Paul Graham</a> wrote about <a href="http://www.paulgraham.com/makersschedule.html" target="_blank">the maker’s schedule</a> in 2009 – basically that there are two types of schedules in this world (primarily?). The traditional manager’s schedule where your day is cut up into hours and a ten minute distraction costs you, at most, an hour’s worth of time.<br />
<div class="wp-caption alignleft" style="width: 310px;"><a href="http://commons.wikipedia.org/wiki/File:Prim_clockwork.jpg"><img alt="Prim clockwork of a wristwatch, watchmaking ex..." class="zemanta-img-inserted zemanta-img-configured" height="235" src="http://swizec.com/blog/wp-content/uploads/2011/12/300px-Prim_clockwork4.jpg" title="Prim clockwork of a wristwatch, watchmaking ex..." width="300" /></a> <div class="wp-caption-text">Image via Wikipedia</div></div>On the other hand you have something PG calls the maker’s schedule – a schedule for those of us who produce stuff. Working on large abstract systems involves fitting the whole thing into your mind – somebody once likened this to constructing a house out of expensive <a class="zem_slink" href="http://en.wikipedia.org/wiki/Lead_glass" rel="wikipedia" title="Lead glass">crystal glass</a>and as soon as someone distracts you, it all comes barreling down and shatters into a thousand pieces.<br />
This is why programmers are so annoyed when you distract them.<br />
Because of this huge mental investment, we simply can’t start working until we can expect a couple of hours without being distracted. It’s just not worth constructing the whole model in your head and then having it torn down half an hour later.<br />
In fact, talking to a lot of founders you’ll find out they feel like they simply can’t get any work done during the day. The constant barrage of interruptions, important stuff ™ to tend to and emails to answer simply don’t allow it. So they get most of their “work work” done during the night when everyone else is sleeping.<br />
<h2>The sleepy brain</h2>But even programmers should be sleeping at night. We are not some race of super humans. Even programmers feel more alert during the day.<br />
<div class="wp-caption alignright" style="width: 323px;"><img alt="Ballmer's peak" height="284" src="http://swizec.com/blog/wp-content/uploads/2011/12/ballmer_peak1.png" title="Ballmer's peak" width="313" /> <div class="wp-caption-text">Ballmer's peak</div></div>Why then do we perform our most mentally complex work work when the brain wants to sleep and we do simpler tasks when our brain is at its sharpest and brightest?<br />
Because being tired makes us better coders.<br />
Similar to the ballmer peak, being tired can make us focus better simply because when your brain is tired it <em>has</em> to focus! There isn’t enough left-over brainpower to afford losing concentration.<br />
I seem to get the least work done right after drinking too much tea or having a poorly timed <a class="zem_slink" href="http://en.wikipedia.org/wiki/Energy_drink" rel="wikipedia" title="Energy drink">energy drink</a>. Makes me hyperactive and one second I’m checking twitter, the next I’m looking at hacker news and I just seem to be buzzing all over the place..<br />
You’d think I’d work better – so much energy, so much infinite overclocked brainpower. But instead I keep tripping over myself because I can’t focus for more than two seconds at a time.<br />
Conversely, when I’m slightly tired, I just plomp my arse down and <em>code</em>. With a slightly tired brain I can code for hours and hours without even thinking about checking twitter or facebook. It’s like the internet stops existing.<br />
I feel like this holds true for most programmers out there. We have too much brainpower for ~80% of the tasks we work on – face it, writing that one juicy algorithm, requires ten times as much code to produce an environment in which it can run. Even if you’re doing the most advanced machine learning (or something) imaginable, a lot of the work is simply cleaning up the data and presenting results in a lovely manner.<br />
And when your brain isn’t working at full capacity it looks for something to do. Being tired makes you dumb enough that the task at hand is enough.<br />
<h2>Bright computer screens</h2>This one is pretty simple. Keep staring at a bright source of light in the evening and your <a class="zem_slink" href="http://en.wikipedia.org/wiki/Circadian_rhythm" rel="wikipedia" title="Circadian rhythm">sleep cycle</a>gets delayed. You forget to be tired until 3am. Then you wake up at 11am and when the evening rolls around you simply aren’t tired because hey, you’ve only been up since 11am!<br />
<div class="wp-caption alignright" style="width: 310px;"><a href="http://commons.wikipedia.org/wiki/File:Innsbrucklarge.jpg"><img alt="A city" class="zemanta-img-inserted zemanta-img-configured" height="200" src="http://swizec.com/blog/wp-content/uploads/2011/12/300px-Innsbrucklarge5.jpg" title="A city" width="300" /></a> <div class="wp-caption-text">Image via Wikipedia</div></div>Given enough iterations this can essentially drag you into a different timezone. What’s more interesting is that it doesn’t seem to keep rolling, once you get into that equilibrium of going to bed between 3am and 4am you tend to stay there.<br />
Or maybe that’s just the <a class="zem_slink" href="http://en.wikipedia.org/wiki/Alarm_clock" rel="wikipedia" title="Alarm clock">alarm clocks</a> doing their thing because society tells us we’re dirty dirty slobs if we have breakfast at 2pm.<br />
<h2>Fin</h2>To conclude, programmers work at night because it doesn’t impose a time limit on when you have to stop working, which gives you a more relaxed approach, your brain doesn’t keep looking for distractions and a bright screen keeps you awake.Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com2tag:blogger.com,1999:blog-6005375441571965134.post-37706205306428624402011-12-03T15:34:00.000-08:002011-12-20T12:36:09.742-08:00How to Correctly Manage Screen Resolutions in Game Programming<h2>Introduction</h2>A few years ago, a lot of PC monitors had an aspect ratio of 4:3 you couldn’t imagine 16:9 or 16:10 monitors or others that go around today. So when you were to deploy a game; you designed your GUI following this aspect ratio. If you were to level up the screen resolution, the aspect ratio was the same and there wasn’t any kind of problems. Things got a little bit complicated when plasma and LCD monitors showed up and mobile device acquired more popularity. Nowadays, when you design a game, you have to cover all the odds, and that means your game has to support if not all, the most screen resolutions you can. <br />
You may think that almost any device supports a 640X480(4:3 Aspect Ratio) pixel resolution and a game designed in this resolution may work in all environments, which may be true but imagine how it will look like in a 24-inch monitor with a 16:9 Aspect Ratio; Besides nowadays, LCD monitors are the most popular and they only look fine at its native resolution. This article proposes a small solution to this problem. <br />
First let’s take a look of the most popular screen resolutions nowadays: <br />
<a name='more'></a><br />
<img alt="image001.jpg" complete="true" height="254" src="http://www.codeproject.com/KB/game/ManageScreenResolutions/image001.jpg" style="height: 254px; width: 425px;" width="425" /><br />
<div class="Caption">Fig 1 Resolution charts</div>As you may see, the most popular resolutions have an aspect ratio of 4:3, 16:9 and 16:10 so if your game is designed for targeting these ones, it will cover up a great percentage of the market. You may be wondering, how screen resolution and aspect ratio can mess with your game development; imagine you go full screen, and you have a very descent video card and you want to take advantage of the current screen resolution to give your game more definition. But you have a life bar, a score meter, or whatever 2D stuff you can bring from your imagination, this 2D content requires a pixel based location, and you designed it for a 1024X768(4:3) and the current resolution is 1600X1200(4:3). So if you placed it at a 100 height and 600 left pixels on the screen, it will show up in any place but the expected if you use the present resolution. Here starts the idea of a layout, for example to design your entire GUI for at the minimum 4:3 aspect ratio pixel resolution, that is 640X480, and multiply all the positions of the 2D content by a number that is the relation between this resolution and the current resolution; for example if a button is placed at 60 pixel top and 90 pixel left when you use a Fullscreen resolution of 1600X1400 (4:3), you multiply by 1600/640 = 2,5 the top and the left and you get the pixel position for this control, this operation needs to be done also to the width and height. That is a good solution if all screen resolutions had a 4:3 aspect ratio, notice you can’t do it if your target screen resolution in 16:9 because the 2D content will look expanded and will not maintain its aspect ratio. So what can be done? It took me a lot of time to reach to the conclusions you see here. I’ve played a lot of games trying to see how they solved this issue. <br />
The first one, and more used, is to design a centered GUI. That means that all 2D stuff is somehow centered on the screen, so every 2D control has its relative position regarding the center of the screen. In this way, you can maintain the aspect ratio with any kind of screen resolution. For this approach, you only have to ensure that all 2D will be seen on the screen at the minimum supported resolution. I think the game left 4 dead one and two use this. <br />
The second one is to design your game in a 4:3 aspect ratio resolution and to fill with a black color the space that is not used (the game Plants VS Zombies uses it). That is like putting a square in a rectangle and to fill with black color the space in the rectangle that is not contained by the square. In this case, the square that contains all the visible area is scaled to reach the height of the screen. I have a 23 inch display with a 1920X1080 resolution and it looks like this: <br />
<img alt="image002.gif" complete="true" height="144" src="http://www.codeproject.com/KB/game/ManageScreenResolutions/image002.gif" style="height: 144px; width: 288px;" width="288" /> <br />
<div class="Caption">Fig 2 Watch how it’s filled the spaced that is not used</div>The third one, and the one I want to explain here is to design your GUI to a 4:3 16:9 and 16:10 aspect ratio, to design it in the smallest resolution it uses, 4X3 (800X600) 16X9(1280X720)and 16X10(1280X800) when the game tries to go full screen, it checks out if the current screen resolution matches any of this aspect ratio, second to try to calculate the proportion between the smallest screen resolution of this aspect ratio and so calculate the desired layout. If the current aspect ratio is not supported, then go to the list of supported resolutions and find the most supported. <br />
It’s important to say that this is an approach proposed by me, I’ve not read any article regarding this, this whole idea came from a need to solve a personal problem, and sometimes people prefer to try to think and solve the problem and then to look at how others solve it. I expect positive feedback of people telling me what was their approach to solving this issue. If you think this was useful to you leave a comment. Thanks.Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com0tag:blogger.com,1999:blog-6005375441571965134.post-15287845307303261982011-11-23T12:08:00.000-08:002011-11-23T12:08:21.213-08:00Another small 3D solar system project<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggsM9lVfHazGEd5s6d0ixJDIsVOz5_k_M9qHpY_PpLee1pzcVbFfbQXHEmFKN_poedlIMeP-TOXfhT-tuxiB5ATSqhTciOiilJQpF7ZM5V5mgOD5-yARujqzImYfPki5CFvY0QdQQcwr-2/s1600/solar1%2527.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" hda="true" height="218px" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggsM9lVfHazGEd5s6d0ixJDIsVOz5_k_M9qHpY_PpLee1pzcVbFfbQXHEmFKN_poedlIMeP-TOXfhT-tuxiB5ATSqhTciOiilJQpF7ZM5V5mgOD5-yARujqzImYfPki5CFvY0QdQQcwr-2/s320/solar1%2527.png" width="320px" /></a></div>This one is written in C++ builder 6, It uses a .3DS file format for objects. Ive painted the sun with transparency and painted it again to give it a lighting efect. The galaxy is an image, if you find this post useful leave a comment<br />
here is the download link<br />
<br />
<a name='more'></a><span id="goog_1144743464"></span><span id="goog_1144743465"></span><br />
<a href="http://filebeam.com/a408b6da32d5c9716500c7082cb823f8">http://filebeam.com/a408b6da32d5c9716500c7082cb823f8</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com3tag:blogger.com,1999:blog-6005375441571965134.post-33818550447485687552011-10-17T09:58:00.000-07:002011-10-28T07:56:22.157-07:003D exploration of a classroom in C# with sources<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6wOfeefnnI0cLzQ5ki9M7v2Z6UkpT7J-mPXcPUAijT-xHn3PAMxnGQfm0BBZSUGkywVUkb7tjs5LjgB8EBOrk1eSKbuc2i08dTp5IVTKymN5HPNqEyBISkQ_AMke_SxydpxU7rTTnYbRD/s1600/classroom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6wOfeefnnI0cLzQ5ki9M7v2Z6UkpT7J-mPXcPUAijT-xHn3PAMxnGQfm0BBZSUGkywVUkb7tjs5LjgB8EBOrk1eSKbuc2i08dTp5IVTKymN5HPNqEyBISkQ_AMke_SxydpxU7rTTnYbRD/s1600/classroom.png" /></a></div><br />
In this version Ive emulated the movement of the camera by buttons, Ive placed some collisions using my small engine, shadowengine. Feel free to use the source code for your personal projects, also you can edit the textures to fit your own needs. If you download this sample, please leave a comment, anonymous comments are enabled.<br />
here is the download link<br />
<br />
<a name='more'></a><a href="http://filebeam.com/0ce737bac406e51ac6ffa0a38a2c55bb">http://filebeam.com/0ce737bac406e51ac6ffa0a38a2c55bb</a><br />
Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com4tag:blogger.com,1999:blog-6005375441571965134.post-24862665286682829562011-09-26T12:23:00.000-07:002018-03-07T19:20:26.753-08:00Small engine for opengl developers with c# sourceshello Ive been developing a small engine to work with opengl, its has only the basics functions such as opengl initialization, object and texture loading, a small aproach to collisions,a small sets of windows controls. It depends on tao framework an GLUT. I uploaded the entire VS2008 project hoping that anyone could use it an expand it.Also if you don't want to use it there is a lot of source code that yo can use. Almost every project of this blog use it. If you take a look at the code you will see that is very easy and understandable, for example take a lool at this initialization code<br />
<br />
<a name='more'></a><br />
mainForm = this; <br />
<br />
InitializeComponent();<br />
//id of the place I am going to draw<br />
hdc = (uint)this.Handle;<br />
//take an error if happens<br />
string error = "";<br />
//graphic window command initialization<br />
OpenGLControl.OpenGLInit(ref hdc, this.Width, this.Height, ref error);*<br />
<br />
if (error != "")<br />
{<br />
MessageBox.Show("There was an error initializing OpenGl");<br />
}<br />
<br />
Lighting.SetupLighting(); <br />
ContentManager.SetTextureList("texturas\\"); //specify location of textures (jpg, bmp, tga) <br />
ContentManager.LoadTextures(); //load it<br />
ContentManager.SetModelList("modelo\\"); // specify location of objects(3ds format)<br />
ContentManager.LoadModels(); //load it <br />
<br />
<br />
with this small code you initialize a graphic device context, load textures(png, bmp and jpg) and load all 3ds files that yo can call later on the application.<br />
<br />
This is only an example of what you can do with this engine, I recommend it for anyone who really want to know what is underneath a lot of engines people use; and that serve of a starting point to those who want to make their own. It is not complete but at least have the basics to get you ready. I encourage you to tell me your opinion in order to have feedback from you, anonymous commenting is enabled. <br />
<br />
<br />
I tell again the download link only contains the engine (or graphic platform) the examples are the other entries of this blog<br />
here is the Github link, enjoy it<br />
<a href="http://filebeam.com/cf2a471b9247a3cdfacda171986927a3">https://github.com/vtserej/Shadowengine</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com2tag:blogger.com,1999:blog-6005375441571965134.post-65444043980772763262011-09-21T12:00:00.000-07:002011-10-28T08:06:37.928-07:00Lighthouse in C# with sources<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWykxnszIE5aED8pOeH0-fszjyVG1lTPE0eP3bqgf7-yuIRJML4uPKAxnWdeNo6U5qNz3qHm8_Ha_kNMbKRjXmEa14ME_58FnWn9aPO-ETqLw3DFtVqGu18z23myguZofnk8o9F3dXxAGd/s1600/faro.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWykxnszIE5aED8pOeH0-fszjyVG1lTPE0eP3bqgf7-yuIRJML4uPKAxnWdeNo6U5qNz3qHm8_Ha_kNMbKRjXmEa14ME_58FnWn9aPO-ETqLw3DFtVqGu18z23myguZofnk8o9F3dXxAGd/s1600/faro.png" /></a></div><br />
This is an example of a small lighthouse, It has three times of the day: morning, evening and night here is the download link, If you like this post please leave a comment, anonymous comments are enabled<br />
<br />
<a name='more'></a><a href="http://filebeam.com/80e76b62ed86353ae55d016aa41f71b6">http://filebeam.com/80e76b62ed86353ae55d016aa41f71b6</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com1tag:blogger.com,1999:blog-6005375441571965134.post-42164208414643418262011-08-29T11:52:00.000-07:002011-10-28T08:08:48.571-07:00Solid of revolution generator in C# with sources<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifliSjo5r2LQQWDY2Qyo7f3qNOI4OhrIBNQG_l59OxoTHvyZNUnFlTyW1NUGJ9PGTTtRZ_Fg0_0WMK35av19zxgF0R9zCe2XmeZzxKcz9q-fTAiBM1U8mm-nHe-dZWkMpTo4NbDN7dP6sm/s1600/solid.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifliSjo5r2LQQWDY2Qyo7f3qNOI4OhrIBNQG_l59OxoTHvyZNUnFlTyW1NUGJ9PGTTtRZ_Fg0_0WMK35av19zxgF0R9zCe2XmeZzxKcz9q-fTAiBM1U8mm-nHe-dZWkMpTo4NbDN7dP6sm/s1600/solid.png" /></a></div>This is a sample of a solid of revolution generator, it has some basics functions. Source code is very easy. Any question post it here. Here is the download link.<br />
<a name='more'></a><a href="http://filebeam.com/a0af3f44828876d6196f76f6a9a4ec81">http://filebeam.com/a0af3f44828876d6196f76f6a9a4ec81</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com0tag:blogger.com,1999:blog-6005375441571965134.post-7279193804475947792011-08-23T09:16:00.000-07:002017-02-12T12:28:47.923-08:00XNA battleship game<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-Oh5jMOlUg7xW6RgjR4lKMt46iXCtbfv3g6mX5V9FfuMjSnWgzhfvxxcVdbUNRx0vU0x0s8JipQ0uTHMnA3x2UAjiUWbxz5L3AtxOY7rNs2i6xdsa-eHjs6hRDp-vuwYkgsuB7DIqSote/s1600/game1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" kca="true" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-Oh5jMOlUg7xW6RgjR4lKMt46iXCtbfv3g6mX5V9FfuMjSnWgzhfvxxcVdbUNRx0vU0x0s8JipQ0uTHMnA3x2UAjiUWbxz5L3AtxOY7rNs2i6xdsa-eHjs6hRDp-vuwYkgsuB7DIqSote/s400/game1.JPG" width="400" /></a></div>
<br />
This is the classic battleship game written in XNA. Unfortunatelly I lost the last version when Megaupload closed, and this one is completed by 70%, but it can be played. In this game I cover a lot of 3D techniques that I have learned over the years. This is a ported version of my first game. The first version was with opengl and c++ builder and it was less complex. here are the download links, Anonymous comments are allowed.<br />
<a name='more'></a><a href="https://github.com/vtserej/xna_naval_battleship">https://github.com/vtserej/xna_naval_battleship</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com13tag:blogger.com,1999:blog-6005375441571965134.post-28671649346444374382011-08-22T11:55:00.000-07:002011-12-01T06:33:24.809-08:003D plaza with openGL and c#<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijiI99Bb4etBATBjfWN0LAOl6VbK67jw059fBiAWtLajN5oV_vxCFVhiihX6NScDSrNqKjZRPVfR2AhrkxalE4LGI5bGJ84cA_s2lKnp2HFue7eOs-kHGIASuftHXBobrPPvpYQx-Moc4O/s1600/square.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijiI99Bb4etBATBjfWN0LAOl6VbK67jw059fBiAWtLajN5oV_vxCFVhiihX6NScDSrNqKjZRPVfR2AhrkxalE4LGI5bGJ84cA_s2lKnp2HFue7eOs-kHGIASuftHXBobrPPvpYQx-Moc4O/s1600/square.png" /></a></div><br />
This is an example of a 3D plaza, The waving flag was a code I borrowed from NEHE tutorials. The shadows are on the texture, they were rendered on 3D max studio. The sky-box and the grass outside are not models, they are hard coded. Collisions are implemented in the easiest way. That means that I am working on defining a 2D segment and calculating the distance to that segment, if that number is bellow a number I define there is a collision and therefore the camera wont move on that direction. Sources are in MVS 2008, I am using TAO Framework and a small engine I made myself called Shadowengine.<br />
<br />
Here is a list of what you will learn if you download(and leave a comment) this sample<br />
<ol><li>A small approach to simple camera collision</li>
<li> You will learn how to implemente a simple FPS camera and to combine it with the collision class</li>
<li>You will have the working code of a waving flag to use it to your convenience</li>
<li>You will have a sky-box to use in your personal projects</li>
<li>You will get an idea of what opengl Quadrics are, the stick of the flag is a quadric.</li>
<li>If you wish you will learn how to use mi small opengl-engine, I develop this engine to teach my students the basis of 3D programming</li>
</ol>Any comments on the blog will be useful, anonymous comments are enabled. Also I will answer all the questions about this project.<br />
<br />
<a name='more'></a><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbpmF-nQokMcB-WQhWw-E39VJOpwirhkjeLj5h-ISL6DgEzARS_pWTxLs22kUOpkuMXXT3oabnu17MlJGKXDy-xKK_O4axNKyR-9Vr6THJrbSE7ZmvwS0jrqC5r7sTnsaHMax6ijYE-QH7/s1600/plaza3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbpmF-nQokMcB-WQhWw-E39VJOpwirhkjeLj5h-ISL6DgEzARS_pWTxLs22kUOpkuMXXT3oabnu17MlJGKXDy-xKK_O4axNKyR-9Vr6THJrbSE7ZmvwS0jrqC5r7sTnsaHMax6ijYE-QH7/s1600/plaza3.png" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdinvtvfM0afoB_YlwKoxDzvNREXSiaYilnVmqM5oQF-2xREFtarRrwtJBziEcrB1gIVLqAKaKUqmaLev3II-NvVCxsBXa5wGXe-PyyjFimuoZZJUIhtfLSVIaxM2DkZWArBEla-DtQXM2/s1600/plaza2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdinvtvfM0afoB_YlwKoxDzvNREXSiaYilnVmqM5oQF-2xREFtarRrwtJBziEcrB1gIVLqAKaKUqmaLev3II-NvVCxsBXa5wGXe-PyyjFimuoZZJUIhtfLSVIaxM2DkZWArBEla-DtQXM2/s1600/plaza2.png" /></a></div><br />
<a href="http://filebeam.com/1d565743d88fb8476a15d9da41ea5dd7">http://filebeam.com/1d565743d88fb8476a15d9da41ea5dd7</a><br />
or try this<br />
http://www.megaupload.com/?d=L4C1I88UVasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com6tag:blogger.com,1999:blog-6005375441571965134.post-67877679131506416742011-08-22T08:32:00.000-07:002011-09-02T07:14:30.503-07:00Ten things to achieve when starting 3D programming<b>Ten things to achieve when starting 3D programming </b><br />
Starting 3D programming it is not an easy task to accomplish. There are a lot of new things that come into to play, and they vary from choosing a programming language to selecting the correct 3D modeling software. <br />
These are the stuff that when they are done, no matter in what language and with what rendering engine, you can consider yourself a semi-expert on this matter.<br />
<br />
<a name='more'></a><br />
<b>1. Build your own custom graphic initialization function. </b><br />
<br />
Today with the great variety of 3D engines and platforms this task is always delegated to those. I still remember the times when you had to initialize openGL with all the windows functions, and how you had to manage windows handles and resource loading yourself. This is useful to understand how things are managed internally and will give you more comprehension of what you are doing. My advice is to start looking at NEHE tutorials, it has a graphic initialization function written in C and with windows APIs on chapter one. If this is a lot for you to handle, you should look at C++ equivalent functions or try to port them to managed languages like C#, java or python. There are plenty examples on the internet.<br />
<br />
<b>2. Implement your own camera.</b><br />
<br />
You can copy and paste a camera code from the internet, and use it without major problems, but it is not until you make your own camera from scratch that you will fully understand some concepts like vector handling, translation matrices, angle conversion, etc. You should start by coding a FPS (First Person Shooter) camera; it has everything it needs to get you ready. Later if you want to make your own game and you can’t use it, I recommend you to read this article to find out the type of camera that best suits your needs: http://en.wikipedia.org/wiki/Virtual_camera_system. <br />
<br />
<br />
<b>3. Understand primary 3D concepts</b><br />
<br />
When I started, I began to hear a lot of new words like, anti-aliasing, anisotropic filtering, occlusion testing, z-buffer, alpha testing, shader language, bump mapping, etc. Maybe if you are a gamer you have seen some of them while configuring the graphic settings of your game. Make sure you spent some time reading about this, because it will give an overview of what is 3D programming.<br />
<br />
<br />
<b>4. Learn everything you can about vectors and matrices </b><br />
<br />
This is always underestimated, I strongly recommend that in order to correctly manage things like cameras, terrain following, ray tracing; you should know everything about this. You should also learn minimum trigonometry basis. Now I understand how easy my life would have been if I would had spent only a few hours studying this matter.<br />
<br />
<b>5. Code yourself a 3D model loader</b><br />
<br />
I recommend beginning with an .OBJ file or a .STL file because they have an ASCII format representation. Later you can move to other more complex formats like .3DS. With this you not only will understand more how 3D models are saved, you will have to draw it in its raw manner: triangles, and then you will understand how everything it’s drawn in a graphics engine. <br />
<br />
<b>6. Successfully make your own collision algorithm</b><br />
<br />
One thing it’s to draw a world and another thing it’s to manage his geometry. In a 3D world there are no physics laws, you have to create them. If you want an object not to go through a wall, then you have to create and internal geometric representation of the wall and make all the calculations yourself. There are several approaches to handle collisions; I recommend starting with binary collisions with a labyrinth project.<br />
<br />
<b>7. Implement a small particle engine.</b><br />
<br />
I was disappointed when I found out that fire, smoke, some lighting and other stunning effects that you see in 3D games are made by particles and that particles are in essence planes with textures facing the camera. The more particles you add the more realistic the effect looks but the performance is more compromised <br />
The first particle engine I made was a rocket smoke and I did it without looking a particle engine tutorial. Later I realized I had reinvented the wheel but I was really into this. By carrying out this you will understand concepts like particle emitters, particle behavior and bill boarding techniques, among others. <br />
<br />
<b>8. Learn the basics in a 3D modeling software </b><br />
<br />
In order to make changes to the 3D models you want to use in your application you should at least know operations like translating, scaling, rotating, texturing, exporting to other formats and making simple models. If you don’t do that you will suffer from depending on other people to do your first game. I’ve worked with a few modeling software and I strongly recommend 3D Max or Maya.<br />
<br />
<b>9. Load and play an animation </b><br />
<br />
Loading and correctly playing an animation was the most difficult thing in 3D that I've ever did. I had to do reverse engineering to a 3D max .XAF file. I had to learn also stuff like bone hierarchy, matrix interpolation, among others. At the end it was very gratifying to look at your own models to move by themselves. I recommend starting animating a robot since models like animals and people require other technique called skinning. <br />
<br />
<b>10. Code a 2D custom Graphic User Interface (GUI) </b><br />
<br />
When I began programming in XNA; I was forced to build my own GUI because XNA does not have implemented any windows controls. This gave me two things, the first one was the ability to make my custom GUI controls and the other one was the understanding of concepts like event handling and event capturing. It is no easy, the most difficult control I have made is a listbox, but once is made you can use it everywhere. <br />
<br />
<br />
<br />
I am sure when you manage to achieve this ten things you can say you have the basic knowledge of 3D programming. I wrote this because I spent a lot of work to achieve them and because I would like to everyone to have a small guideline when starting in this world. My advice is to start making a small game and to try to adapt them on the go. I think this is the best way because trying to learn all this without the possibility to see it in action is not very motivating. Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com4tag:blogger.com,1999:blog-6005375441571965134.post-10673161926184017752011-08-17T06:27:00.001-07:002012-02-28T09:03:15.444-08:003d house with sources<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYbPLHEcXggF0n2Kk3zcHw2Tt40RPgsSkIHaevRptlEbZqAq3MCTCoTeyJxT_zUiEsMuzb9x_yR2OhgCZVFlPML89xB0QBXo03f2pneM6_FNZoD3rRLSjOznMHGpsIeq_5NioG0lpTsszJ/s1600/house.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYbPLHEcXggF0n2Kk3zcHw2Tt40RPgsSkIHaevRptlEbZqAq3MCTCoTeyJxT_zUiEsMuzb9x_yR2OhgCZVFlPML89xB0QBXo03f2pneM6_FNZoD3rRLSjOznMHGpsIeq_5NioG0lpTsszJ/s1600/house.png" /></a></div><br />
In this example I have loaded a 3ds file. Shadows are pre-rendered on the texture, so they run fast on video cards.<br />
<br />
<a name='more'></a>collisions are implemented in a very easy way. I used line collisions, that means that in order the camera not to go through a wall yo most provide the 2d coordinates of both ends, they form a line and camera always calculate the distance to that line and if is less than some precalcuated value, then there is a collision and the camera will not go in that direction. There is also in one room a fan working, Ive calculated the pivot point so I can rotate it. If you have any questions regarding this, post it here, anonymous comments are enabled. <br />
<br />
here is the download link<br />
http://fbe.am/2NDVasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com72tag:blogger.com,1999:blog-6005375441571965134.post-44080408346656272822011-08-16T11:43:00.001-07:002016-06-06T20:56:04.155-07:00delaunay triangulation example in c#<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpbR2JISxXmp0pHSBXaUWm1epQwgY9fUzGnOD-Yp1AjsCtIvZWjQRNfzxE2Y1W-rXx2LxHznXgXeBITaq6IWTaF_p6dByzeIzPLNefAkBSNpiQDcBvZ2Xd5APvetJs1CfGYcnoAKJXmac6/s1600/delaunay.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpbR2JISxXmp0pHSBXaUWm1epQwgY9fUzGnOD-Yp1AjsCtIvZWjQRNfzxE2Y1W-rXx2LxHznXgXeBITaq6IWTaF_p6dByzeIzPLNefAkBSNpiQDcBvZ2Xd5APvetJs1CfGYcnoAKJXmac6/s1600/delaunay.png" /></a></div>
<br />
This is an example demo of a Delaunay triangulation, it was invented by Boris Delaunay and is used for making hull surfaces from single points. The downloadable .rar also has a java implementation and other stuff to study. The algorithm has a high degree order and has a few bugs when there are many points. It can be added points dynamically and circles that make triangles can be drawn as well.<br />
Any questions post it here. Anonymous comments are enabled. this is the download link<br />
<a name='more'></a><a href="https://github.com/vtserej/delaunay2d-triangulation"> https://github.com/vtserej/delaunay2d-triangulation </a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com8tag:blogger.com,1999:blog-6005375441571965134.post-53034876435133302182011-08-16T09:17:00.000-07:002015-03-23T05:48:18.374-07:003D laberinth with opengl and c++ builder<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTNeOxT8NMrTNP71rkMUymCjt9HWIfC0FygrwPdbp7W2bgkWyXn49ZvCVVUEVS8U4b5FrvvbU5q6WTkE8dYFYBVMa7axJgohQPJtwkJK5fg3lYuaoZsBcmL5062Ov66fFEzhT01KpM2ZN0/s1600/laberinto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTNeOxT8NMrTNP71rkMUymCjt9HWIfC0FygrwPdbp7W2bgkWyXn49ZvCVVUEVS8U4b5FrvvbU5q6WTkE8dYFYBVMa7axJgohQPJtwkJK5fg3lYuaoZsBcmL5062Ov66fFEzhT01KpM2ZN0/s1600/laberinto.png" /></a></div>
<br />
This is a sample of a 3D laberinth with binary collision, fog and other stuff, here is the download link of the project, any questions, post it here <br />
<a name='more'></a><a href="http://fbe.am/b1J">Download link</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com16tag:blogger.com,1999:blog-6005375441571965134.post-39411744219775266562011-08-15T13:38:00.000-07:002011-12-30T13:14:39.996-08:003d asteroid game in with sources<div align="center" class="MsoNormal" style="margin: 0cm 0cm 10pt; text-align: center;"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;">A basic 3D asteroid game in openGL with C#</span></span></b><br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://3.bp.blogspot.com/-iTccSwffiQs/Tv4pmJMDtBI/AAAAAAAAAC4/Z0HDMCcZedU/s1600/image0011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="243px" rea="true" src="http://3.bp.blogspot.com/-iTccSwffiQs/Tv4pmJMDtBI/AAAAAAAAAC4/Z0HDMCcZedU/s320/image0011.jpg" width="320px" /></a></div></div><div align="center" class="MsoNormal" style="margin: 0cm 0cm 10pt; text-align: center;"><span style="font-size: 14pt; line-height: 115%; mso-fareast-language: ES; mso-no-proof: yes;"><shapetype coordsize="21600,21600" filled="f" id="_x0000_t75" o:preferrelative="t" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path gradientshapeok="t" o:connecttype="rect" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="Imagen_x0020_1" o:spid="_x0000_i1025" style="height: 282pt; mso-wrap-style: square; visibility: visible; width: 371.25pt;" type="#_x0000_t75"><imagedata cropbottom="10036f" cropleft="14563f" cropright="12445f" croptop="3686f" o:title="" src="file:///C:\Users\SISVAS~1\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png"><span style="font-family: Calibri;"></span></imagedata></shape></span><span lang="EN-US" style="font-size: 14pt; line-height: 115%; mso-ansi-language: EN-US;"></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;">This article is intended for beginners that want to start in 3d game programming and don’t know where to start. It is programmed in Opengl using VS 2008 and a small graphic engine I made myself called Shadowengine. It has the basics of what a game should have: a Score, levels of difficulty and a life counter. All this is written a small amount of code lines, trying to be simple and understandable.</span></span></div><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;"></span></span><br />
<div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;">The first problem I had to achieve is the scene to look like outer space, for that issue I set the background color to black. In opengl is set this way</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="color: #2b91af; font-family: "Courier New"; font-size: 10pt; line-height: 115%; mso-ansi-language: EN-US; mso-no-proof: yes;">Gl</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 115%; mso-ansi-language: EN-US; mso-no-proof: yes;">.glClearColor(0, 0, 0, 1);<span style="color: green;">//red green blue alpha</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;">The other problem were the stars and I solve it by drawing random white points on the screen, the algorithm is more or less this way I generate a random point and measure the distance to the spaceship, and is if is less than a predefined number I discard it and repeat the process until are creates the desired stars look at the code:</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;"></span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">public</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> <span style="color: blue;">void</span> CreateStars(<span style="color: blue;">int</span> cantidad)</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Random</span> r = <span style="color: blue;">new</span> <span style="color: #2b91af;">Random</span>();</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">int</span> count = 0;</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">while</span> (count != cantidad)</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Position</span> p = <span style="color: blue;">default</span>(<span style="color: #2b91af;">Position</span>);</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>p.x = (r.Next(110)) * (<span style="color: blue;">float</span>)<span style="color: #2b91af;">Math</span>.Pow(-1, r.Next());</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>p.z = (r.Next(110)) * (<span style="color: blue;">float</span>)<span style="color: #2b91af;">Math</span>.Pow(-1, r.Next());</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>p.y = (r.Next(110)) * (<span style="color: blue;">float</span>)<span style="color: #2b91af;">Math</span>.Pow(-1, r.Next());</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">if</span> (<span style="color: #2b91af;">Math</span>.Pow(<span style="color: #2b91af;">Math</span>.Pow(p.x, 2) + <span style="color: #2b91af;">Math</span>.Pow(p.y, 2) +</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt 141.6pt; mso-layout-grid-align: none; text-indent: 35.4pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Math</span>.Pow(p.z, 2), 1 / 3f) > 15)</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>stars.Add(p);</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>count++;</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; line-height: 115%; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}<span style="color: green;"> </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"><span style="font-family: Calibri;">The score is a number which increases over time and it grows faster everytime I pass a level. The level increases every 450 frames.</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">The last issue I had to adress is the problem of asteroid collision. I make for the ship three positions(one for th ship and two for the wings) and everytime in a while I check the distance between all the asteroid and those trhee positions. If is under a predefinde value I execute the collission event.</span><span lang="EN-US" style="color: green; font-family: "Courier New"; font-size: 10pt; line-height: 115%; mso-ansi-language: EN-US; mso-no-proof: yes;"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><b style="mso-bidi-font-weight: normal;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US;"><span style="font-family: Calibri;">The project has 6 classes</span></span></b></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">AsteroidGenerator.cs</span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It handles the creation of asteroids in random places and with random sizes and speeds. It also have the method to query wether or not<span style="mso-spacerun: yes;"> </span>It have been a collision between the spaceship and an asteroid</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Asteroid.cs</span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It handles all concerning an asteroid such as the movement, texture selection, drawing, among others</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Star.cs</span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It has a method to create random white points and to draw them.<span style="mso-spacerun: yes;"> </span></span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Camera.cs</span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> It<span style="color: #2b91af;"> </span>handles the selection of the user camera and to set the right perspective view of the scene</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">SpaceShip.cs </span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">This class contains all methods and attributes regarding the spaceship, such as movement, drawing, etc.</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Controller.cs </span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">This class manages the game creation, game logic and contains all the classes needed to run the game. Here is a portion of code</span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"><span style="font-family: Calibri;"></span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> System;</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> System.Collections.Generic;</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">using</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> System.Text;</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><br />
</div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="color: blue; font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">namespace</span><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"> Naves</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">class</span> <span style="color: #2b91af;">Controller</span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Camera</span> camara = <span style="color: blue;">new</span> <span style="color: #2b91af;">Camera</span>();</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Star</span> star = <span style="color: blue;">new</span> <span style="color: #2b91af;">Star</span>();</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">SpaceShip</span> spaceShip = <span style="color: blue;">new</span> <span style="color: #2b91af;">SpaceShip</span>(); </span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: #2b91af;">SpaceShip</span> Nave</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">get</span> { <span style="color: blue;">return</span> spaceShip; }<span style="color: blue;">set</span> { spaceShip = <span style="color: blue;">value</span>; }</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: #2b91af;">Camera</span> Camara</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">get</span> { <span style="color: blue;">return</span> camara; }</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">void</span> BeginGame()</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">AsteroidGenerator</span>.GenerateAsteroid(35, <span style="color: blue;">false</span>);</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">void</span> ResetGame()</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">AsteroidGenerator</span>.GenerateAsteroid(35, <span style="color: blue;">true</span>);</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>spaceShip.Reiniciar();<span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">void</span> CreateObjects()</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>star.CreateStars(450);</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>spaceShip.Create();<span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">Asteroid</span>.Crear();<span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: blue;">public</span> <span style="color: blue;">void</span> DrawScene()</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>{</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="mso-spacerun: yes;"> </span>star.Draw();</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;">AsteroidGenerator</span>.DrawAsteroids();</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>spaceShip.Dibujar();<span style="mso-spacerun: yes;"> </span></span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;"><span style="mso-spacerun: yes;"> </span>}</span></div><div class="MsoNormal" style="line-height: normal; margin: 0cm 0cm 0pt; mso-layout-grid-align: none;"><span lang="EN-US" style="font-family: "Courier New"; font-size: 10pt; mso-ansi-language: EN-US; mso-no-proof: yes;">}</span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"><span style="font-family: Calibri;"><span style="mso-spacerun: yes;"> </span><span style="color: #2b91af;"><span style="mso-spacerun: yes;"> </span></span></span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span style="font-family: Calibri;"><span lang="EN-US" style="color: #2b91af; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;">Main.cs</span><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"> This is the form wich contains this visual components of the game. It contains the controller class and give the player information throught proper windows controls. It has a timer to draw perodically the scene and has the code for texture and object loading. </span></span></div><div class="MsoNormal" style="margin: 0cm 0cm 10pt;"><span lang="EN-US" style="font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin; mso-no-proof: yes;"><span style="font-family: Calibri;">If you want to add sound to the project uncomment the commented lines and press ctrl+alt+E and under managed debuggin asistants uncheck the loaderlock exception</span></span><span lang="EN-US" style="font-family: "Calibri", "sans-serif"; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-latin; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin; mso-no-proof: yes;">I am hoping to receive feedback from this example.</span><span lang="EN-US" style="font-family: "Calibri", "sans-serif"; font-size: 12pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: 'Times New Roman'; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;"> </span>, Anonymous comments are enabled.</div>Here is the download link<br />
<a href="http://filebeam.com/4219ffee44dcabb93daa30c61109b91a">http://filebeam.com/4219ffee44dcabb93daa30c61109b91a</a><br />
<a name='more'></a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com4tag:blogger.com,1999:blog-6005375441571965134.post-2208177570102075622011-08-12T08:32:00.000-07:002011-08-24T08:12:56.166-07:00The difficulty of deploying 3D applicationsI began to develop 3D application by fun. It was at the 3rd year of university. I friend of mine had a few examples and I began to learn how to get into this word. First I started with C++ builder 6.0 with open GL. This was great until I started with MVS 2008 and I realized that that was the future. When you make a c++ 3D app with opengl there are a lot of chances that It will go very slow, because Microsoft don't install the openGL driver by default,. so if you deploy your 3D openGL application in a PC with windows there a chance that It will not be what you wanted. At the beginning that was not a problem because everyone installed the video drivers of the manufactures, but nowadays with W7 normal people let the OS to install the video driver they got by default and of course they do not have OPENGL driver. Another issue is with platforms if that if you use glut32, your application wont run on 64 bit OS. You may say that opengl will be the future but with windows dominating 90 % of the market I don't think so. When I started programming opengl with visual studio there was the problem of the .NET framework, your PC had to have it in order to run your application so your app will not be click and run in all windows versions. Later when I started programming in XNA I was amazed how fast you could make a 3D app but then I saw that in order to use XNA you had to have .NET, XNA redistributable and pixel shader 1.0 so if you want to make apps for developing countries that was not an option, also there is the problem of the license. Today I am beginning to make some stuff with directX SDK and is very promising, it only needs .NET in order to run. If this doesn't work i will start with Ogre or Irlicht.Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com3tag:blogger.com,1999:blog-6005375441571965134.post-50098330716508310492011-08-12T06:20:00.000-07:002011-08-30T07:59:33.210-07:00Solar system in 3D with opengl and C#<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk-0Ojafl2kXHkvyVTyV87YI7tKZA8xq7SA7toceVn6W2sm4p6J6LUEfpVZTuGjIu03AIqjmc6JGIbJl5tYg9svXanSM-9BKpy-dc8LNH_cAYMkaZtpgy6ib4ppyl5t_HaVFCpRInm1wGP/s1600/solar.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk-0Ojafl2kXHkvyVTyV87YI7tKZA8xq7SA7toceVn6W2sm4p6J6LUEfpVZTuGjIu03AIqjmc6JGIbJl5tYg9svXanSM-9BKpy-dc8LNH_cAYMkaZtpgy6ib4ppyl5t_HaVFCpRInm1wGP/s1600/solar.png" /></a></div><br />
Here is an example using opengl with C#, this example uses a random function for creating stars, also uses quadrics for the planets. Any questions post it here. Anonymous comments are enabled<br />
<br />
<a name='more'></a><a href="http://filebeam.com/a0e3c3ac7843c74f1581e55d9f6d722b">http://filebeam.com/a0e3c3ac7843c74f1581e55d9f6d722b</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com21tag:blogger.com,1999:blog-6005375441571965134.post-42801014770187403712011-08-11T13:39:00.000-07:002014-01-22T18:27:02.390-08:003D field with opengl and c#<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmkFwU_Fr-aBs6zKwL22_bHXW1mCPaI2dIgB6RyxrmLrGvudR0M87Vn8-uEDDTk0b9A47GIj7cTn3W5QJ2o6t2Sd12Yn0EIk-U29w1W7z1C5fOIVz8mn2sdKMQ12LrBxgg5lbsnbCVrc9Z/s1600/field.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmkFwU_Fr-aBs6zKwL22_bHXW1mCPaI2dIgB6RyxrmLrGvudR0M87Vn8-uEDDTk0b9A47GIj7cTn3W5QJ2o6t2Sd12Yn0EIk-U29w1W7z1C5fOIVz8mn2sdKMQ12LrBxgg5lbsnbCVrc9Z/s1600/field.png" /></a></div>
<br />
Here is a virtual exploration of a field, it uses a billboarding technique for displaying trees and sheeps and a simple collision algorithm. It also uses a FPS camera and some transparency blendings. here is the link to the source code, any kind of suggestions are acepted.<br />
<a href="http://www.google.com/url?q=http%3A%2F%2Ffbe.am%2Fqqz&sa=D&sntz=1&usg=AFQjCNF3fiHLvqCYw5OAO8cnsmxkCjQ7-Q" target="_blank">http://fbe.am/qqz</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com7tag:blogger.com,1999:blog-6005375441571965134.post-89564197425558784902011-08-11T12:54:00.000-07:002011-09-14T06:47:38.666-07:003D factory with opengl and C#<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITSH9919dnW-g8tw0b_5I6Koqxxc_2-V2PBsJozwoMJGOE1rv0geGt9TVEv_prS6xSVbRWyo8_4AMtt1ULNLypaEIkHNCEKkUQHwjCTADz60plnXezoe6uotcTUgyTk6EarcHKuyHvVEV/s1600/factory.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgITSH9919dnW-g8tw0b_5I6Koqxxc_2-V2PBsJozwoMJGOE1rv0geGt9TVEv_prS6xSVbRWyo8_4AMtt1ULNLypaEIkHNCEKkUQHwjCTADz60plnXezoe6uotcTUgyTk6EarcHKuyHvVEV/s1600/factory.jpg" /></a></div><br />
This is a virtual exploration of a factory, it contains a FPS(First Person Shooter) camera and loads a 3DS file, shadows are on the texture, this project uses a simply engine I made myself called shadowengine, if you want the source code ask it here, note it doesn't work on 64 bit systems because of glut32.dll issues, here is the download link<br />
<a name='more'></a>http://www.megaupload.com/?d=HQN25QPC<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQO4j6PZVKsvVFdgJmrnwT-YZpCPeQMipY6XJQW3dDdDWACqoOVsg_PuxLzjoIqBiBRtG-1u6sb9h12loqvapepaFIQJmUUhQNJChpxDTlnMJ9PLUouGKmbbIA4mspxNLrjho51BvPOkDU/s1600/factory.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQO4j6PZVKsvVFdgJmrnwT-YZpCPeQMipY6XJQW3dDdDWACqoOVsg_PuxLzjoIqBiBRtG-1u6sb9h12loqvapepaFIQJmUUhQNJChpxDTlnMJ9PLUouGKmbbIA4mspxNLrjho51BvPOkDU/s320/factory.png" width="320" /></a></div>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com2tag:blogger.com,1999:blog-6005375441571965134.post-22945230226579358542011-08-11T12:21:00.001-07:002012-03-15T14:27:48.366-07:00car race in 3D with C#<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7MN9SVGXkxwD5H1-ZFyRrwJoXpH6yI8LP7R7F6iQIDj5rRSvxYBw4BdOyzh5_oO9JyTpy826_ej-kTyNRjYg7NyKi3GA8vCl291lAKXe6L93CcTdWtMs5jJaaBu3M7BYXXCDA4yvn76xg/s1600/car+race.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7MN9SVGXkxwD5H1-ZFyRrwJoXpH6yI8LP7R7F6iQIDj5rRSvxYBw4BdOyzh5_oO9JyTpy826_ej-kTyNRjYg7NyKi3GA8vCl291lAKXe6L93CcTdWtMs5jJaaBu3M7BYXXCDA4yvn76xg/s1600/car+race.png" /></a></div><!--[if gte mso 9]><xml> <o:OfficeDocumentSettings> <o:RelyOnVML/> <o:AllowPNG/> </o:OfficeDocumentSettings> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:HyphenationZone>21</w:HyphenationZone> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>ES</w:LidThemeOther> <w:LidThemeAsian>X-NONE</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="--"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"
DefSemiHidden="true" DefQFormat="false" DefPriority="99"
LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false"
UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false"
UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false"
UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false"
UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false"
UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false"
UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false"
UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!--[if gte mso 10]> <style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tabla normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-priority:99;
mso-style-qformat:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin-top:0cm;
mso-para-margin-right:0cm;
mso-para-margin-bottom:10.0pt;
mso-para-margin-left:0cm;
line-height:115%;
mso-pagination:widow-orphan;
font-size:11.0pt;
font-family:"Calibri","sans-serif";
mso-ascii-font-family:Calibri;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:"Times New Roman";
mso-fareast-theme-font:minor-fareast;
mso-hansi-font-family:Calibri;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
</style> <![endif]--><span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11.0pt; line-height: 115%; mso-ansi-language: EN-US; mso-ascii-theme-font: minor-latin; mso-bidi-font-family: "Times New Roman"; mso-bidi-language: AR-SA; mso-bidi-theme-font: minor-bidi; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin; mso-hansi-theme-font: minor-latin;">Yesterday I was looking at the demo I published in my last article, the asteroid demo, it had a good acceptance because it was made in a very simple way and today I will do the same. This article is a simple straightforward car race game trying to contain the minimum amount of lines of code (LOC). There are 3 cars that begin in a start line, they random change their speeds on the race and the race ends on an end line, quite simple. The user can follow the race with the keys W(forward) S(backward)<span style="mso-spacerun: yes;"> </span>and can change the camera takes. At the end of the race a message is shown telling which car was the winner and you are able to reset the race and start over again. The car race is a simulation and the user can’t take control over any car.</span><br />
<span lang="EN-US" style="font-family: "Calibri","sans-serif"; font-size: 11pt; line-height: 115%;">Any suggestions to the code let me know, here is the download link </span><br />
<a name='more'></a><a href="http://fbe.am/3BS">http://fbe.am/3BS</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com12tag:blogger.com,1999:blog-6005375441571965134.post-65987240915242243372011-08-11T10:47:00.001-07:002011-09-07T05:51:25.839-07:003D chess in openGL with C#<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFVYp6gy0SlFco1E-GkCKH3SHsA_Ull3NzM3Di3TRffL5IoX_QeJ5XWMimk-x5ZBG9toPKmjb0mGCCiUT_Vrd_ePRle_7u68mJyALzLkuYF3o4nx2TcrWP3bU9lKpbD-JVWbtnQz8yPjXs/s1600/alfil.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFVYp6gy0SlFco1E-GkCKH3SHsA_Ull3NzM3Di3TRffL5IoX_QeJ5XWMimk-x5ZBG9toPKmjb0mGCCiUT_Vrd_ePRle_7u68mJyALzLkuYF3o4nx2TcrWP3bU9lKpbD-JVWbtnQz8yPjXs/s1600/alfil.png" /></a></div><br />
In this chess I use a technique called picking, Ive copied and ported some NEHE C code. Pieces are in STL format. This chess only has bishop pieces, it is not intended to be a real chess game. I have all the models of the pieces, if you want them post it here, anonymous comments are enabled. Here is the download link:<br />
<a name='more'></a><a href="http://filebeam.com/fa09cc2a734bda17a90a4b467c5aaba7">http://filebeam.com/fa09cc2a734bda17a90a4b467c5aaba7</a>Vasilyhttp://www.blogger.com/profile/00742341377540439225noreply@blogger.com2