- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在研究 Three.js。我使用 JSONLoader 函数为 3D 模型充电,当我想给它添加阴影时,它没有出现,我不知道为什么,因为我认为我完成了所有步骤:
1- 激活 ShadowMap。
2-我有灯。
3-飞机有recieveShadow = true;
4- 3D 模型有 castShadow = true;
完整代码(现在可用):
<html><head>
<title>Ejemplo 9 Three.js</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/> <!--320-->
<script type = 'text/javascript' src = "plugins/jquery/jquery.js"></script>
<script type = 'text/javascript' src = "plugins/bootstrap/bootstrap.js"></script>
<script type = 'text/javascript' src = "plugins/three.js-master/build/three.js"></script>
<script type = 'text/javascript' src = "plugins/dat.gui.js/dat.gui.js"></script>
<script type = 'text/javascript' src = "plugins/threex.windowresize-master/threex.windowresize.js"></script>
<script type = 'text/javascript' src = "plugins/threex.keyboardstate-master/threex.keyboardstate.js"></script>
<script type = 'text/javascript' src = "plugins/orbitcontrols/OrbitControls.js"></script>
<script type = 'text/javascript' src = "plugins/ColladaLoader/ColladaLoader.js"></script>
<link rel = "stylesheet" type = "text/css" href = "css/bootstrap.css">
<style>
body{
margin: 0;
padding: 0;
overflow: hidden;
}
#renderer{
overflow: hidden
}
.container-fluid{
margin: 0;
padding: 0;
}
.col-md-12{
margin: 0;
padding: 0;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="col-md-12">
<ul>
<li>Up, Down, Left, Right-> Move cube. </li>
<li>Z & X -> Rotate cube. </li>
<li>WASD -> Scale cube.</li>
</ul>
<div id="renderer">
</div>
</div>
<script type="text/javascript">
$(document).ready(function(){
var renderer;
var controls;
var scene;
var keyboard;
var material;
var plane_texture;
var grass;
var geometry_cube;
var cube_material;
var cube_texture;
var cube;
//Modelo 3D .js
var model3D;
var materials_modelo3D; //materiales
var final_model; //vértices + materiales
//Modelo 3D .dae
var model3Ddae;
var final_modeldae;
var speed;
var space;
var time;
var width;
var height;
var fov;
var aspect;
var near;
var far;
var camera;
var light;
var ambient_light;
var solar_light;
start();
function start(){
renderer = new THREE.WebGLRenderer({antialias:true});
renderer.shadowMap.enabled= true;
width = window.innerWidth-10;
height = window.innerHeight-10;
//alert("ancho: " + width + ", alto:" + height);
renderer.setSize(width, height);
$("#renderer").append(renderer.domElement);
scene = new THREE.Scene();
keyboard = new THREEx.KeyboardState();
model3D = new THREE.JSONLoader(); //vertices
model3Ddae = new THREE.ColladaLoader();
fov = 45; //angle
aspect = width/height;
near = 0.1;
far = 1000;
camera = new THREE.PerspectiveCamera (fov, aspect, near, far);
THREEx.WindowResize(renderer, camera);
var color = new THREE.Color("rgb(250, 250, 250)");
renderer.setClearColor(new THREE.Color(color));
camera.position.z= 20;
camera.position.y= 10;
scene.add(camera);
controls = new THREE.OrbitControls(camera, renderer.domElement);
plane_texture = new THREE.TextureLoader().load("texturas/cesped.jpg");
cube_texture = new THREE.TextureLoader().load("texturas/muro.jpg");
crear_plano();
model3D.load("models/layers260a.js", functionAddModel);
// model3Ddae.load("models/rifle.dae" , functionAddModelDae);
// cube();
makeLight();
var ejesAyuda = new THREE.AxesHelper(20); //son los ejes de ayuda creo
scene.add(ejesAyuda);
renderer.render(scene, camera);
}
function crear_plano(){
geometria_plano = new THREE.PlaneGeometry(100, 100, 10, 10);
plane_texture.wrapS = plane_texture.wrapT = THREE.RepeatWrapping; // para repetir la textura a lo largo y a lo width
plane_texture.repeat.set(10, 10); // tablero de 10 x 10
//material y agregado de textura
material = new THREE.MeshLambertMaterial({map: plane_texture, side: THREE.DoubleSide});
grass = new THREE.Mesh(geometria_plano, material);
//grass.rotation.y=-0.5;
grass.rotation.x=Math.PI/2;
grass.receiveShadow=true;
scene.add(grass);
}
function functionAddModel(geometry){
imagen = new THREE.TextureLoader().load("models/mario.jpg");
materials_modelo3D = new THREE.MeshLambertMaterial({map: imagen});
final_model = new THREE.Mesh(geometry, materials_modelo3D);
scene.add(final_model);
final_model.scale.set(10, 10, 10);
final_model.position.set(10, 13, 10);
final_model.rotation.y = Math.PI;
final_model.castShadow = true;
final_model.receiveShadow = false;
animation();
}
function functionAddModelDae(infodae){
final_modeldae = infodae.scene;
final_modeldae.position.set(20, 5, 10);
final_modeldae.scale.x = final_modeldae.scale.y = final_modeldae.scale.z =.2;
// final_modeldae.rotation.y = Math.PI;
scene.add(final_modeldae);
}
function animation(){
requestAnimationFrame(animation);
render_modelo();
var objMov = final_model;
speed = 100;
time = 0.001;
space = speed * time;
if(keyboard.pressed("up")){ //tecla flecha arriba
objMov.position.z+=space;
}else if(keyboard.pressed("down")){
objMov.position.z-=space;
}else if(keyboard.pressed("right")){
objMov.position.x+=space;
}else if(keyboard.pressed("left")){
objMov.position.x-=space;
}else if(keyboard.pressed("z")){
objMov.rotation.x+=space;
}else if(keyboard.pressed("x")){
objMov.rotation.y+=space;
}else if(keyboard.pressed("w")){
objMov.scale.y+=space;
}else if(keyboard.pressed("a")){
objMov.scale.x-=space;
}else if(keyboard.pressed("s")){
objMov.scale.y-=space;
}else if(keyboard.pressed("d")){
objMov.scale.x+=space;
}
controls.target.set(objMov.position.x, objMov.position.y, objMov.position.z);
}
function render_modelo(){
controls.update();
renderer.render(scene, camera);
}
function cube(){
geometry_cube = new THREE.CubeGeometry(10, 10, 10);
cube_material = new THREE.MeshLambertMaterial({map:cube_texture, side:THREE.DoubleSide, wireframe: false});
cube = new THREE.Mesh(geometry_cube, cube_material);
cube.position.x= -4;
cube.position.y = 6;
cube.position.z = 0;
cube.castShadow = true;
scene.add(cube);
}
function makeLight(){
light = new THREE.PointLight(0xffffff);
light.position.set(-100,200,100);
scene.add(light);
ambient_light = new THREE.AmbientLight(0x000000);
scene.add(ambient_light);
solar_light = new THREE.DirectionalLight();
solar_light.position.set(500, 500, -500);
solar_light.castShadow = true;
solar_light.intensity = 1.3;
solar_light.shadow.mapSize.width = 1024;
solar_light.shadow.mapSize.height = 1024;
solar_light.shadow.camera.near = 250;
solar_light.shadow.camera.far = 1000;
intensidad=50;
solar_light.shadowCameraLeft = -intensidad;
solar_light.shadowCameraRight = intensidad;
solar_light.shadowCameraTop = intensidad;
solar_light.shadowCameraBottom = -intensidad;
scene.add(solar_light);
var helper = new THREE.CameraHelper( light.shadow.camera );
var helper2 = new THREE.CameraHelper(solar_light.shadow.camera);
scene.add(helper);
scene.add(helper2);
}
});
</script>
</body>
</html>
一如既往地感谢您的帮助:)
最佳答案
您的“草” Material 是 MeshBasicMaterial
。顾名思义,它是纯基础的,对光源没有反应。
有趣的是,MeshBsicMaterial
可以转换阴影, 但无法接收它们。 (https://github.com/mrdoob/three.js/issues/8116#issuecomment-183459078)。
将草地 Material 更改为MeshLambertMaterial
,阴影就会出现。
关于javascript - Three.js:为什么没有出现影子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48387527/
我正在尝试创建一个邻接列表,为此我需要创建一个链接列表的数组列表。当我这样做时,这个 cityList 的大小不会更改为构造函数中传递的大小。我觉得这可能是由于阴影造成的,但我不确定阴影是如何工作的,
我正在包装应用程序的影子 jar 。该应用程序使用kotlin和一些外部依赖项。所有依赖项都在我的jar中,但在运行时出现以下异常: java.lang.NoSuchMethodError: java
我有两个自定义元素 #shadow-root (open) 我正在尝试设计 像这样: #desktop::shadow desktop-window { backgro
通过此实例化的 Web 组件样式不正确: connectedCallback() { const shadowRoot = this.attachShadow({ mode: 'open' });
规范在这里 - https://drafts.csswg.org/css-scoping/#slots-in-shadow-tree有注释如下。 Note: A non-obvious result
我在我的应用程序中使用网络组件。在 Web 组件中,我需要插入一个 React 组件。 Web Component 有 Shadow DOM。当我尝试使用以下方法渲染 react 组件时,出现错误。
CSS Scoping说 The descendants of a shadow host must not generate boxes in the formatting tree. Instea
在尝试比较两个 dll 的 API 更改时,一位同事注意到某些类有两个 GetType() 方法。 经过更深入的检查,结果是 System.Exception 隐藏了 GetType(): // th
HTML代码: #shadow-root (user-agent) "this is text in textarea" 我正在尝试使用此 JQuery 使用 id="in
我正在使用 Robolectric 并尝试创建 GoogleApiClient 的 Shadow 对象,但没有成功。 Shadow 类中的方法永远不会被调用。 GoogleApiClient 是接口(
我正在尝试寻找一种不使用 iframe 来封装 Javascript 的方法。理想情况下,我想要一种在父页面上加载外部 HTML 组件(小部件)的方法,而无需使用 iframe 附带的两步加载过程(首
我是Gradle和Shadow jar(Gradle version of Maven's Shade plugin)的新手。我正在构建一个胖jar,我想在其中合并服务文件(这就是为什么我首先使用影子
如您所见,我想动态添加内容,但 shadow DOM 不显示内容 我怎样才能使内容可见?我想让内容可见。 let shadow = document.querySelector('#nameTag')
我正在编写一个 chrome 扩展程序,它可以在页面加载或更改时修改元素属性。 我使用 Mutation Observer 执行此操作。然而,当加载/更改 shadow-dom(即嵌入的 twitte
我试图了解单选按钮如何在影子 dom 中工作。我有一个脚本标签,我将一个影子 DOM 附加到一个元素,然后附加一些单选按钮。我的问题是单选按钮未呈现。 Title Radi
我读了很多关于 shadow DOM 的文章,但对此不是很清楚。能谁能告诉我什么是 shadow DOM 以及如何为下面的代码添加一个? 最佳答案 Shadow DOM
关于 的 CSS 优先级规则是怎么说的?影子 DOM 中的标签? 我有一个元素 , 中包含的 CSS 文件与: component { display: inline-block; }
如果我的 Web 组件是 的直接子组件,我必须对它应用特殊的 CSS 样式。元素。到目前为止,这是我尝试过的: /* applies even if the component isn't a di
我尝试使用 https://github.com/webcomponents/webcomponentsjs 中的 polyfill 制作我自己的 Web 组件 这是我的代码: im-list.htm
我是一名优秀的程序员,十分优秀!