gpt4 book ai didi

c# - Unity 3D/球体中的翻转法线

转载 作者:行者123 更新时间:2023-12-02 18:01:58 25 4
gpt4 key购买 nike

我已经为我的游戏编写了这段代码,我想要的是统一翻转纹理上的法线。我有一个模型和一个纹理,希望纹理位于球体模型内部而不是外部。我想通过在翻转纹理顶部的球体内部的图像周围移动相机来创建 360 度全景效果。

现在,当我第一次按下播放按钮时,它运行得很好,但是当我停止播放并想再次播放时,我看不到棋盘,也看不到周围的环境。

似乎每玩两次它就会起作用。我对此有点陌生,我不知道我的错误在哪里。

using UnityEngine;
using System.Collections;

public class InvertObjectNormals : MonoBehaviour
{
public GameObject SferaPanoramica;

void Awake()
{
InvertSphere();
}

void InvertSphere()
{
Vector3[] normals = SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.normals;
for(int i = 0; i < normals.Length; i++)
{
normals[i] = -normals[i];
}
SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.normals = normals;

int[] triangles = SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.triangles;
for (int i = 0; i < triangles.Length; i+=3)
{
int t = triangles[i];
triangles[i] = triangles[i + 2];
triangles[i + 2] = t;
}

SferaPanoramica.GetComponent<MeshFilter>().sharedMesh.triangles= triangles;
}
}

最佳答案

我意识到您找到了脚本的修复程序。

如果您对替代方案感兴趣,可以使用着色器来翻转法线。

翻转法线.shader

Shader "Flip Normals" {
Properties {
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader {

Tags { "RenderType" = "Opaque" }

Cull Off

CGPROGRAM

#pragma surface surf Lambert vertex:vert
sampler2D _MainTex;

struct Input {
float2 uv_MainTex;
float4 color : COLOR;
};

void vert(inout appdata_full v) {
v.normal.xyz = v.normal * -1;
}

void surf (Input IN, inout SurfaceOutput o) {
fixed3 result = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo = result.rgb;
o.Alpha = 1;
}

ENDCG

}

Fallback "Diffuse"
}

关于c# - Unity 3D/球体中的翻转法线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36423846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com