当前位置: 首页>>代码示例>>C#>>正文


C# Matrix4.MultiplyByQuaternion方法代码示例

本文整理汇总了C#中Matrix4.MultiplyByQuaternion方法的典型用法代码示例。如果您正苦于以下问题:C# Matrix4.MultiplyByQuaternion方法的具体用法?C# Matrix4.MultiplyByQuaternion怎么用?C# Matrix4.MultiplyByQuaternion使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Matrix4的用法示例。


在下文中一共展示了Matrix4.MultiplyByQuaternion方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: setupEntityLight

        private LitShaderDescription setupEntityLight(Entity entity, Matrix4 modelViewMatrix, bool skin)
        {
            // Calculate lighting
            if(entity.Self?.Room == null)
            {
                var shader = ShaderManager.GetEntityShader(0, skin);
                GL.UseProgram(shader.Program);
                return shader;
            }

            var room = entity.Self.Room;

            var ambientComponent = new[]
            {
                room.AmbientLighting[0],
                room.AmbientLighting[1],
                room.AmbientLighting[2],
                1.0f
            };

            if(room.Flags.HasFlagUns(RoomFlag.Water))
            {
                EngineWorld.CalculateWaterTint(ambientComponent, false);
            }

            var currentLightNumber = 0;

            var positions = new float[MAX_NUM_LIGHTS * 3];
            var colors = new float[MAX_NUM_LIGHTS * 4];
            var innerRadiuses = new float[MAX_NUM_LIGHTS * 1];
            var outerRadiuses = new float[MAX_NUM_LIGHTS * 1];

            for (var i = 0; i < room.Lights.Count && currentLightNumber < MAX_NUM_LIGHTS; i++)
            {
                var currentLight = room.Lights[i];

                var xyz = entity.Transform.Origin - currentLight.Position;
                var distance = xyz.Length;

                // Find color
                for (var j = 0; j < 4; j++)
                    colors[currentLightNumber * 4 + i] = Math.Min(Math.Max(currentLight.Colour[i], 0.0f), 1.0f);

                if (room.Flags.HasFlagUns(RoomFlag.Water))
                {
                    unsafe
                    {
                        fixed (float* ptr = colors)
                            EngineWorld.CalculateWaterTint(&ptr[currentLightNumber * 4],
                                false);
                    }
                }

                // Find position
                var tmpPos = modelViewMatrix.MultiplyByQuaternion(currentLight.Position.ToQuat());
                Array.Copy(tmpPos.ToArray(), 0, positions, currentLightNumber * 3, 3);

                // Find fall-off
                if(currentLight.LightType == LightType.Sun)
                {
                    innerRadiuses[currentLightNumber] = 1e20f;
                    outerRadiuses[currentLightNumber] = 1e21f;
                    currentLightNumber++;
                }
                else if (distance <= currentLight.Outer + 1024.0f &&
                         (currentLight.LightType == LightType.Point || currentLight.LightType == LightType.Shadow))
                {
                    innerRadiuses[currentLightNumber] = Math.Abs(currentLight.Inner);
                    outerRadiuses[currentLightNumber] = Math.Abs(currentLight.Outer);
                    currentLightNumber++;
                }
            }

            {
                var shader = ShaderManager.GetEntityShader(currentLightNumber, skin);
                GL.UseProgram(shader.Program);
                GL.Uniform4(shader.LightAmbient, 1, ambientComponent);
                GL.Uniform4(shader.LightPosition, currentLightNumber, colors);
                GL.Uniform3(shader.LightPosition, currentLightNumber, positions);
                GL.Uniform1(shader.LightInnerRadius, currentLightNumber, innerRadiuses);
                GL.Uniform1(shader.LightOuterRadius, currentLightNumber, outerRadiuses);
                return shader;
            }
        }
开发者ID:zdimension,项目名称:FreeRaider,代码行数:84,代码来源:Render.cs


注:本文中的Matrix4.MultiplyByQuaternion方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。