2011-07-02 64 views
0

我在OpenTK以下代码:无法看到正在绘制的顶点纹理或颜色

 unsafe 
     { 
      Vector3* data = (Vector3*)Marshal.AllocHGlobal(
            Marshal.SizeOf(typeof(Vector3)) * simpleVertices.Count); 
      Vector2* uv = (Vector2*)Marshal.AllocHGlobal(
            Marshal.SizeOf(typeof(Vector2)) * simpleVertices.Count); 
      for(int i = 0; i < simpleVertices.Count; i++) 
      { 
       ((Vector3*)data)[i] = simpleVertices[i]; 
       Vector2 thisuv = uvData[i]; 
       ((Vector2*)uv)[i] = uvData[i]; 

      } 

      GL.BindTexture(All.Texture2D, texture.GLTexture.OpenGLName); 
      GL.TexParameter(All.Texture2D, All.TextureWrapS, (int)TextureWrapMode.Repeat); 
      GL.TexParameter(All.Texture2D, All.TextureWrapT, (int)TextureWrapMode.Repeat); 

      byte []squareColors = new byte[simpleVertices.Count]; 
      Random.NextBytes(squareColors); 

      GL.ColorPointer (vertices.Count, All.UnsignedByte, 0, squareColors); 

      GL.VertexPointer(3, All.Float, sizeof(Vector3), new IntPtr(data)); 
      GL.DrawArrays(All.Triangles, 0, simpleVertices.Count); 


      Marshal.FreeHGlobal((IntPtr)data); 
      Marshal.FreeHGlobal((IntPtr)uv); 
     } 

我知道所给出的顶点anduv是正确的(至少他们在我的XNA渲染做工精细的数据),我看到的是在屏幕上正确绘制的白色多边形。

从我上面的代码我应该看到各种各样的颜色,因为我用随机数的字节填充squareColours(我已验证squareColors填充了随机字节),但我不是,顶点都被画成白色。

我也尝试绑定纹理(通过GL.BindTexture),并且也失败了。

任何想法为什么这不起作用?

编辑:当我加入使颜色(参见这个帖子上的第一个评论)的应用程序崩溃了具有以下的输出:

堆栈跟踪:

在(包装托管到本机) OpenTK.Graphics.ES11.GL/Core.DrawArrays (OpenTK.Graphics.ES11.All,INT,INT)在 OpenTK.Graphics.ES11.GL.DrawArrays (OpenTK.Graphics.ES11.All,INT,INT ) [0x00000] in /Users/plasma/Source/iphone/monotouch/OpenGLES/OpenTK/Graphics/ES1 1.iPhone/GL.cs:1326 在Jabber.J3D.Shape.Draw_IOS() [0x00171]在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/J3D/Shape_iOS.cs:136 在Jabber.J3D.Shape.Draw()[0x00000] 在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/J3D/Shape.cs:255 在Jabber.J3D.PhysicShape.Draw() [ 0x00000]在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/J3D/PhysicShape.cs:46 在Jabber.Scene.GameScene.Draw() [0x0001d]在 /用户/ ahmedhakeem /文档/ Projects/JabberEngine2/MyCode/Engine/Scene/GameScene.cs:299 at Ja bber.GameScreenManager.Screen.Draw ()[0x0001f]在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/GameScreenManager/Screen.cs:150 在 ChicksnVixens.Screens.GameplayScreen.Draw () [0x00000]在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/ChicksnVixens/Screens/GameplayScreen.cs:481 在 Jabber.GameScreenManager.ScreenManager.Draw ()[0x00054]在 /用户/ ahmedhakeem /文件/项目/ JabberEngine2/MyCode/Engine/GameScreenManager/ScreenManager.cs:92 at Jabber.BaseGame.Draw (Microsoft.Xna.Framework.GameTime) [0x0002c] in /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/BaseGame.cs:95 在 ChicksnVixens.ChicksnVixensGame.Draw (Microsoft.Xna.Framework.GameTime) [0x00000]在 /用户/ ahmedhakeem /文件/Projects/JabberEngine2/MyCode/ChicksnVixens/ChicksnVixensGame.cs:414 at Microsoft.Xna.Framework.Game.DoDraw (Microsoft.Xna.Framework。GameTime) [0x0001e]在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/ExEn/ExEnCommon/Game/GameCommon.cs:205 在 Microsoft.Xna.Framework.ExEnEmTouchGameView.OnRenderFrame (OpenTK.FrameEventArgs)[0x0002e ]在 /Users/ahmedhakeem/Documents/Projects/JabberEngine2/ExEn/ExEnEmTouch/ExEnEmTouchGameView.cs:329 在 OpenTK.Platform.iPhoneOS.iPhoneOSGameView.RunIteration ()[0x000af]在 /用户/等离子体/源/ iphone/monotouch/OpenGLES/OpenTK/Platform/iPhoneOS/iPhoneOSGameView.cs:592 at MonoTouch.Foundation.NSActionDispatcher.Apply ()[0x00000] in /Users/pl阿斯马贾/源/ iphone/MonoTouch的/共享/粉底/ NSAction.cs:45 在(包装纸运行时调用) object.runtime_invoke_void_ _ (对象,IntPtr的,IntPtr的,IntPtr的)在(包装 管理对-native) MonoTouch.UIKit.UIApplication.UIApplicationMain (整型,字符串[],IntPtr的,IntPtr的)在 MonoTouch.UIKit.UIApplication.Main (串[],字符串,字符串)[0x00038]在 /用户/在ChicksnVixens.Program.Main (string [])[0x00000] in /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/ChicksnVixens/MonoTouch 的Program.cs:24在(包装纸 运行时调用) .runtime_invoke_void_object (对象,IntPtr的,IntPtr的,IntPtr的)

母语堆栈跟踪:

0 aChicks
0x000c5d00 mono_handle_native_sigsegv + 343个1 aChicks 0x0000fce0 mono_sigsegv_signal_handler + 322 2 libSystem.B.dylib 0x95fee48b _sigtramp + 43 3 ???
的0xffffffff为0x0 + 4294967295 4
GLEngine
0x08645753 gleLLVMArrayFunc + 67 5
GLEngine
0x0863cba2 gleDrawArraysOrElements_ExecCore + 856 6 GLEngine
0x08642bbe glDrawArrays_IMM_Exec + 332个 7 OpenGLES
0x0087c308调用glDrawArrays + 57 8 ??? 0x0c3c9b34 0x0 + 205298484 9 ???
0x0c3c9a9c 0x???
0x0f0956c8 0x0 + 252270280 11 ???
0x0f0939c4 0x0 + 252262852 12 ???
0x0f09397c 0x0 + 252262780 13 ???
0x0ecdb286 0x0 + 248361606 14 ???
0x0c3c709a 0x0 + 205287578 15
0x0f0927c4 0x0 + 252258244 16 ???
0x0c3c44cd 0x0 + 205276365 17 ???
0x0c3c3fed 0x0 + 205275117 18 ???
0x0c3c3e9a 0x0 + 205274778 19 ???
0x0c3c3d73 0x0 + 205274483 20 ???
0x0cc03166 0x0 + 213922150 21 ???
0x0cbfd578 0x0 + 213898616 22 ???
0x0cbfd130 0x0 + 213897520 23 ???
0x05e861e8为0x0 + 99115496 24 aChicks 0x0000fa9b mono_jit_runtime_invoke + 1332 25 aChicks
0x001d9f01 mono_runtime_invoke + 137个 26 aChicks
0x0027e52b monotouch_trampoline + 2527 27基金会
0x00619749 NSFireTimer + 125 28 的CoreFoundation
0x014398c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION
+ 19 29 CoreFoundation 0x0143ae74 __CFRunLoopDoTimer + 1220 30 Co主义Refoundation
0x013972c9 __CFRunLoopRun + 1817 31 的CoreFoundation
0x01396840 CFRunLoopRunSpecific + 208 32的CoreFoundation
0x01396761 CFRunLoopRunInMode + 97个33 GraphicsServices
0x028bc1c4 GSEventRunModal + 217个34 GraphicsServices
0x028bc289 GSEventRun + 115 35的UIKit 0x008abc93 UIApplicationMain + 1160 36 ???
0x05e84b8b 0x0 + 99109771 37 ???
0x05e83fb4 0x0 + 99106740 38
0x05e83cee 0x0 + 99106030 39 ???
0x05e83e46为0x0 + 99106374 40 aChicks 0x0000fa9b mono_jit_runtime_invoke + 1332 41 aChicks
0x001d9f01 mono_runtime_invoke + 137个 42 aChicks
0x001dc560 mono_runtime_exec_main + 669 43 aChicks
0x001db96e mono_runtime_run_main + 843个 44 aChicks
0x0009cdd2 mono_jit_exec + 200 45 aChicks
0x00003362 main + 3838 46 aChicks
0x00002249 _start + 208 47 aChicks
0x00002178启动+ 40

从GDB

调试信息:

/tmp/mono-gdb-commands.ZEI8zH:1:错误 在源命令文件:无法 调试自

+0

你使颜色排列? glEnableClientState(GL_COLOR_ARRAY) – datenwolf

+0

我正在编辑我的文章,提到我试过了,并得到一个错误... – tweetypi

回答

4

你对ColorPointer有错误的参数。第一个参数是每种颜色的组件数量。对RGB颜色使用3。

试试这个:

byte[] squareColors = new byte[simpleVertices.Count * 3]; 
Random.NextBytes(squareColors); 
GL.ColorPointer (3, All.UnsignedByte, 0, squareColors); 
+0

哦blimey,你是对的!不幸的是,将修复程序添加到代码中并没有解决我的崩溃问题... – tweetypi

+1

也许你有额外的调用DrawArray的地方,你不指定颜色?如果是这样,你应该在上面的代码中调用DrawArray之后调用glDisableClientState(GL_COLOR_ARRAY)。否则,对DrawArray的另一个调用也将尝试使用不再分配的本地缓冲区中的颜色值。 –

2

您需要启用纹理:

glEnable(GL_TEXTURE_2D); 

(应该很容易弄清楚OpenTk当量)