__ declspec (dllexport) необходим в cpp файлах

Благодаря тому, что @gaitat указал. решение заключалось в том, чтобы объединить / использовать один и тот же сценарий для всех полотен и дублировать только переменные, такие как рендер, сфера, материал и т. д.

var renderer = new THREE.WebGLRenderer({ canvas : document.getElementById('canvas1'), antialias:true, alpha: true});
// default bg canvas color //
renderer.setClearColor( 0xffffff, 0)

var renderer2 = new THREE.WebGLRenderer({ canvas : document.getElementById('canvas2'), antialias:true, alpha: true});
// default bg canvas color //
renderer2.setClearColor( 0xffffff, 0);

//  use device aspect ratio //
renderer.setPixelRatio(window.devicePixelRatio);
// set size of canvas within window //
renderer.setSize(900, 900);

//  use device aspect ratio //
renderer2.setPixelRatio(window.devicePixelRatio);
// set size of canvas within window //
renderer2.setSize(900, 900);

var scene = new THREE.Scene();
var scene2 = new THREE.Scene();
var camera2 = new THREE.PerspectiveCamera( 35, 900/900, 0.1, 100 );
camera2.position.z = 3.5;

var camera = new THREE.PerspectiveCamera( 35, 900/900, 0.1, 100 );
camera.position.z = 4;


var texture2 = new THREE.TextureLoader().load( 'images/blue2.png' );
var texture = new THREE.TextureLoader().load( 'images/pink6.png' );

var sphere_geometry = new THREE.SphereGeometry(200, 200, 200);

var material2 = new THREE.MeshBasicMaterial( { map: texture2 } );
var material = new THREE.MeshBasicMaterial( { map: texture } );

var sphere = new THREE.Mesh(sphere_geometry, material);
var sphere2 = new THREE.Mesh(sphere_geometry, material2);
scene.add(sphere);
scene2.add(sphere2);

var update = function() {

  // change '0.003' for more aggressive animation
  var time = performance.now() * 0.0005;
  //console.log(time)

  //go through vertices here and reposition them

  // change 'k' value for more spikes
  var k = 1;
  for (var i = 0; i < sphere.geometry.vertices.length; i++) {
      var p = sphere.geometry.vertices[i];
      p.normalize().multiplyScalar(1 + 0.1 * noise.perlin3(p.x * k + time, p.y * k, p.z * k));
  }
  sphere.geometry.computeVertexNormals();
  sphere.geometry.normalsNeedUpdate = true;
sphere.geometry.verticesNeedUpdate = true;

}

function animate() {
  sphere.rotation.y += 0.001;
  //sphere.rotation.y += 0.01;

  update();
  /* render scene and camera */
  renderer.render(scene,camera);
  renderer2.render(scene2,camera2);
  requestAnimationFrame(animate);
}

window.addEventListener( 'resize', onWindowResize, false );

function onWindowResize(){

    camera.aspect = 900 / 900;
    camera.updateProjectionMatrix();

        camera2.aspect = 900 / 900;
    camera2.updateProjectionMatrix();

    renderer.setSize( 900, 900 );

    renderer2.setSize( 900, 900 );

}

requestAnimationFrame(animate);
11
задан Zitrax 17 February 2009 в 15:21
поделиться

3 ответа

Нет, его единственное, необходимое в заголовке.

Вот ссылка с большим количеством информации.

Подробно останавливаясь, что заявлял Vinay, я часто видел определенный макрос

#if defined(MODULENAME_IMPORT)
#define EXPORTED __declspec(dllimport)
#elif defined(MODULENAME_EXPORT)
#define EXPORTED __declspec(dllexport)
#endif

Затем в Вашем заголовке Вы делаете

void EXPORTED foo();

установите определение соответственно в настройках проекта для проекта, делающего импорт/экспорт.

13
ответ дан 3 December 2019 в 05:36
поделиться

Нет, это не требуется в cpp файле. Только в объявлении это требуется.

Например, если у меня есть класс CMyClass. Если я захочу экспортировать, то это затем.h будет иметь

Серверный код.h

__ declspec (dllexport) CMyClass {};

В клиентском коде т.е. который использует этот класс, который необходимо передать, объявляют класс как

Клиентский код

__ declspec (dllimport) CMyClass;

//Код для использования класса

6
ответ дан 3 December 2019 в 05:36
поделиться

Можно использовать в .cpp файле также, когда Вы обработали код по шаблону, и Вы инстанцируете в .cpp файле затем, необходимо экспортировать определение, когда это инстанцируют. Но даже в этом случае, я видел, что выполнение в.h также работает. На окнах можно использовать dumpbin.exe/, экспортирует *.dll для наблюдения, какие подписи экспортируются, существует подобная утилита в Linux также. Это даст Вам общее представление, как подпись экспортируется.

2
ответ дан 3 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: