gpt4 book ai didi

javascript - 我想为我的球体对象设置背面剔除,但我对定义线框球体对象的顶点感到惊讶

转载 作者:行者123 更新时间:2023-11-28 06:46:18 25 4
gpt4 key购买 nike

我正在在线框中创建一个球体对象,但当我想定义顶点并应用 back-face culling 时我陷入困境。对于创建的线框球体对象。
有人可以帮忙吗?以及如何定义线框球体对象的顶点?

我的 HTML 文件:这里我使用 three.js图书馆,因为我是新来的 WebGL我无法解决这个问题。

<html>
<head>
<title> Construct a sphere model in WebGL </title>
<script src ="./three.js-master/three.js-master/build/three.js"></script>
<script src ="./three.js-master/three.js-master/build/three.min.js"></script>
<script type="text/javascript" src="Three.js"></script>
</head>
<body onload="createsphere()">
<canvas id="glcanvas" width="840" height="620"></canvas>
</body>
</html>

Three.js 是我链接的 javascript 文件。

function createsphere() {
var pos = function(d) { return document.getElementById(d); };

//def scene, camera, renderer
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

//creating a sphere object

var spheregeometry = new THREE.SphereGeometry(1.0, 30, 30);
var texture = THREE.ImageUtils.loadTexture('earth.jpg', {}, function() { alert('texture loaded');}, function(){ alert('error loading texture');});
var spherematerial = new THREE.MeshBasicMaterial({wireframe: true, map: texture});
var sphere = new THREE.Mesh(spheregeometry, spherematerial);

scene.add(sphere);

camera.position.z = 5;

//renderer
var render = function(e) {
requestAnimationFrame(render);
renderer.render(scene, camera);
};

render();
}

最佳答案

事实上,在制作线框时没有背面剔除,因为严格来说没有,只有线条。

也许你应该做的是创建两个网格,一个带有线框 Material ,另一个较小且黑色,位于第一个网格内,0像这样

function createsphere() {
var pos = function(d) { return document.getElementById(d); };

//def scene, camera, renderer
var scene = new THREE.Scene();
var camera = new THREE.PerspectiveCamera(75, window.innerWidth/window.innerHeight, 0.1, 1000);
var renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

//creating a sphere object

var spheregeometry = new THREE.SphereGeometry(1.0, 30, 30);
var spheregeometry2 = new THREE.SphereGeometry(0.99, 30, 30);
var texture = THREE.ImageUtils.loadTexture('earth.jpg', {}, function() { alert('texture loaded');}, function(){ alert('error loading texture');});

var spherematerial = new THREE.MeshBasicMaterial({wireframe: true});
var spherematerial2 = new THREE.MeshBasicMaterial({side : THREE.DoubleSide, color : '#000000'});

var sphere = new THREE.Mesh(spheregeometry, spherematerial);
var sphere2 = new THREE.Mesh(spheregeometry2, spherematerial2);

scene.add(sphere);
scene.add(sphere2);

camera.position.z = 0;

//renderer
var render = function(e) {
requestAnimationFrame(render);
renderer.render(scene, camera);
};

render();
}

请注意,此解决方案意味着一旦您进入球体内部,您将无法看到外部。

如果您想看到外部,那么,我认为您无法使用 MeshBasicMaterialwireframe 属性来完成这项工作。也许您需要编写一个着色器来渲染球体纹理上的导线。

关于javascript - 我想为我的球体对象设置背面剔除,但我对定义线框球体对象的顶点感到惊讶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33393914/

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