Не видны текстуры или цвета на отрисовываемых вершинах

У меня есть следующий код в 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);
        }

Я знаю, что данные для вершин и uv верны (по крайней мере, они отлично работают в моем средстве визуализации XNA), и я вижу, что белые многоугольники правильно отображаются на экране.

Из приведенного выше кода я должен видеть набор цветов, так как я заполняю SquareColours случайным числом байтов (я проверил, что SquareColors заполняется случайными байтами), но это не так, все вершины нарисовано белым.

Я также пытался привязать текстуру (через GL.BindTexture), и это также не удалось.

Любые идеи, почему это не работает?

редактировать: когда я добавил, чтобы включить цвет (см. первый комментарий к этому сообщению), приложение вылетело со следующим выводом:

Трассировки стека:

Собственная трассировка стека:

Информация об отладке из gdb:

/tmp/mono-gdb-commands.ZEI8zH:1: ошибка в исходном командном файле: невозможно отлаживать себя

У вас неправильные аргументы для ColorPointer. Первый аргумент — количество компонентов на цвет. Используйте 3 для цветов RGB.

Попробуй это:


person meds    schedule 02.07.2011    source источник
comment
о блин, ты прав! К сожалению, добавление ваших исправлений в код не решило мою проблему с вылетом...   -  person datenwolf    schedule 02.07.2011
comment
Возможно, у вас есть дополнительные вызовы DrawArray где-то, где вы не указываете цвета? Если это так, вы должны вызвать glDisableClientState(GL_COLOR_ARRAY) после вызова DrawArray в коде выше. В противном случае другой вызов DrawArray также попытается использовать значения цвета из локального буфера, который больше не выделен.   -  person meds    schedule 02.07.2011


Ответы (2)


Вам нужно включить текстурирование:

(должно быть легко найти эквивалент OpenTk)

byte[] squareColors = new byte[simpleVertices.Count * 3];
Random.NextBytes(squareColors);
GL.ColorPointer (3, All.UnsignedByte, 0, squareColors);
person Ville Krumlinde    schedule 02.07.2011
comment
at (оболочка, управляемая в собственный) OpenTK.Graphics.ES11.GL/Core.DrawArrays (OpenTK.Graphics.ES11.All,int,int) at OpenTK.Graphics.ES11.GL.DrawArrays (OpenTK.Graphics.ES11. All,int,int) [0x00000] в /Users/plasma/Source/iphone/monotouch/OpenGLES/OpenTK/Graphics/ES11.iPhone/GL.cs:1326 в Jabber.J3D.Shape.Draw_IOS () [0x00171] в /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/J3D/Shape_iOS.cs:136 at 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] в /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/Scene/GameScene.cs:299 в Jabber.GameScreenManager.Screen.Draw () [0x0001f] в /Users/ahmedhakeem/Documents /Projects/JabberEngine2/MyCode/Engine/GameScreenManager/Screen.c s:150 at ChicksnVixens.Screens.GameplayScreen.Draw () [0x00000] в /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/ChicksnVixens/Screens/GameplayScreen.cs:481 at Jabber.GameScreenManager.ScreenManager.Draw () [ 0x00054] в /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/Engine/GameScreenManager/ScreenManager.cs:92 в Jabber.BaseGame.Draw (Microsoft.Xna.Framework.GameTime) [0x0002c] в /Users/ahmedhakeem/Documents /Projects/JabberEngine2/MyCode/Engine/BaseGame.cs:95 в ChicksnVixens.ChicksnVixensGame.Draw (Microsoft.Xna.Framework.GameTime) [0x00000] в /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/ChicksnVixens/ChicksnVixensGame. cs:414 в 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] в /Users/plasma/Source/iphone/monotouch/OpenGLES/OpenTK /Platform/iPhoneOS/iPhoneOSGameView.cs:592 at MonoTouch.Foundation.NSActionDispatcher.Apply () [0x00000] in /Users/plasma/Source/iphone/monotouch/shared/Foundation/NSAction.cs:45 at (среда выполнения оболочки ) object.runtime_invoke_void_это_ (object,intptr,intptr,intptr) в (оболочке, управляемой в собственный) MonoTouch. UIKit.UIApplication.UIApplicationMain(int,string[],intptr,intptr) в MonoTouch.UIKit.UIApplication.Main(string[],string,string) [0x00038] в /Users/plasma/Source/iphone/monotouch/UIKit/ UIApplication.cs:26 at ChicksnVixens.Program.Main (string[]) [0x00000] в /Users/ahmedhakeem/Documents/Projects/JabberEngine2/MyCode/ChicksnVixens/MonoTouch Program.cs:24 at (вызов среды выполнения оболочки) .runtime_invoke_void_object (объект,intptr,intptr,intptr) - person meds; 02.07.2011
comment
0 ACHICKS
0x000C5D00 MONO_HANDLE_NATION_SIGSEGV + 343 1 ACHICKS 0x0000FCE0 MONO_SIGSEGV_SIGNAL_HANDLER + 322 2 libsigstem.b.dylib 0x95fee48b _sigtramp + 43 3 ???
0xfffffffff 0x0 + 4294967295 4
glengine
0x08645753 Glellvmarrayfunc + 67 5 br> GLEngine
0x0863cba2 gleDrawArraysOrElements_ExecCore + 856 6 GLEngine
0x08642bbe glDrawArrays_IMM_Exec + 332 7 OpenGLES
0x0087c308 glDrawArrays + 57 8 ??? 0x0c3c9b34 0x0 + 205298484 9 ???
0x0C3C9A9C 0x0 + 205298332 10 ???
0x0f0956c8 0x0 + 252270280 11 ???
0x0f0939c4 0x0 + 252262852 12 ???
0x0f09397c 0x0 + 252262780 13?
0x0ecdb286 0x0 + 248361606 + 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 ???
0x0clc03166 0x0 + 213922150 21 ???
0x0cbfd578 0x0 + 21389861662 ?? ?
0x0CBFD130 0x0 + 213897520 23 ???
0x05E861E8 0x0 + 99115496 24 ACHICKS 0x0000FA9B MONO_JIT_RUNTIME_INVOOKE + 1332 25 ACHICKS
0x001D9F01 MONO_RUNTIME_INVOOKE + 137 26 ACHICKS
0x0027E52B Monotouch_Trampoline + 2527 27 Foundation
0x00619749 strong>NSFireTimer + 125 28 CoreFoundation
0x014398c3 __CFRUNLOOP_IS_CALLING_OUT_TO_ A_TIMER_CALLBACK_FUNCTION + 19 29 CoreFoundation 0x0143ae74 __CFRunLoopDoTimer + 1220 30 CoreFoundation
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 UiiacplicationMain + 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 основной + 3838 46 aChicks
0x00002249 _start + 208 47 aChicks
0x00002178 start + 40 - person Ville Krumlinde; 02.07.2011

Вы включили цветовой массив? glEnableClientState (GL_COLOR_ARRAY)

glEnable(GL_TEXTURE_2D);

Я был в процессе редактирования своего поста, чтобы упомянуть, что я попробовал это и получил ошибку...

person Ben Voigt    schedule 02.07.2011